From 8558ba3d6447e6dc921eec7e5c0579b21a7d5bb4 Mon Sep 17 00:00:00 2001 From: shuting Date: Thu, 2 May 2019 11:15:23 -0700 Subject: [PATCH] change util function for retrieving kind, name and namespace from resource RAW --- webhooks/admission.go | 2 +- webhooks/mutation.go | 13 +++++-------- webhooks/utils.go | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/webhooks/admission.go b/webhooks/admission.go index cf146e7ce1..b81eb3210f 100644 --- a/webhooks/admission.go +++ b/webhooks/admission.go @@ -58,7 +58,7 @@ func IsRuleApplicableToResource(kind string, resourceRaw []byte, policyResource if resourceRaw != nil { meta := parseMetadataFromObject(resourceRaw) - name := parseNameFromMetadata(meta) + name := parseNameFromObject(resourceRaw) if policyResource.Name != nil { diff --git a/webhooks/mutation.go b/webhooks/mutation.go index b787874f3f..f3a47ac198 100644 --- a/webhooks/mutation.go +++ b/webhooks/mutation.go @@ -76,9 +76,8 @@ func (mw *MutationWebhook) Mutate(request *v1beta1.AdmissionRequest) *v1beta1.Ad } if len(policyPatches) > 0 { - meta := parseMetadataFromObject(request.Object.Raw) - namespace := parseNamespaceFromMetadata(meta) - name := parseNameFromMetadata(meta) + namespace := parseNamespaceFromObject(request.Object.Raw) + name := parseNameFromObject(request.Object.Raw) mw.controller.LogPolicyInfo(policy.Name, fmt.Sprintf("Applied to %s %s/%s", request.Kind.Kind, namespace, name)) mw.logger.Printf("%s applied to %s %s/%s", policy.Name, request.Kind.Kind, namespace, name) @@ -117,10 +116,9 @@ func (mw *MutationWebhook) applyPolicyRulesOnResource(kind string, rawResource [ var policyPatches []PatchBytes var violations []violation.Info - meta := parseMetadataFromObject(rawResource) resourceKind := parseKindFromObject(rawResource) - resourceName := parseNameFromMetadata(meta) - ns := parseNamespaceFromMetadata(meta) + resourceName := parseNameFromObject(rawResource) + ns := parseNamespaceFromObject(rawResource) for ruleIdx, rule := range policy.Spec.Rules { err := rule.Validate() @@ -192,8 +190,7 @@ func (mw *MutationWebhook) applyPolicyRulesOnResource(kind string, rawResource [ // Applies "configMapGenerator" and "secretGenerator" described in PolicyRule func (mw *MutationWebhook) applyRuleGenerators(rawResource []byte, rule types.PolicyRule) error { - meta := parseMetadataFromObject(rawResource) - namespaceName := parseNameFromMetadata(meta) + namespaceName := parseNameFromObject(rawResource) err := mw.applyConfigGenerator(rule.ConfigMapGenerator, namespaceName, "ConfigMap") if err == nil { diff --git a/webhooks/utils.go b/webhooks/utils.go index fcca09f150..0f163514ba 100644 --- a/webhooks/utils.go +++ b/webhooks/utils.go @@ -33,14 +33,24 @@ func parseLabelsFromMetadata(meta map[string]interface{}) labels.Set { return nil } -func parseNameFromMetadata(meta map[string]interface{}) string { +func parseNameFromObject(bytes []byte) string { + var objectJSON map[string]interface{} + json.Unmarshal(bytes, &objectJSON) + + meta := objectJSON["metadata"].(map[string]interface{}) + if name, ok := meta["name"].(string); ok { return name } return "" } -func parseNamespaceFromMetadata(meta map[string]interface{}) string { +func parseNamespaceFromObject(bytes []byte) string { + var objectJSON map[string]interface{} + json.Unmarshal(bytes, &objectJSON) + + meta := objectJSON["metadata"].(map[string]interface{}) + if namespace, ok := meta["namespace"].(string); ok { return namespace }