mirror of
https://github.com/kyverno/kyverno.git
synced 2025-04-18 02:06:52 +00:00
Merge pull request #2247 from NoSkillGirl/bug/2181_generate_sync_issue
Added condition for resource synchronization
This commit is contained in:
commit
15e16e808c
1 changed files with 33 additions and 8 deletions
|
@ -359,19 +359,44 @@ func applyRule(log logr.Logger, client *dclient.Client, rule kyverno.Rule, resou
|
|||
logger.V(2).Info("created generate target resource")
|
||||
|
||||
} else if mode == Update {
|
||||
// if synchronize is true - update the label and generated resource with generate policy data
|
||||
if rule.Generation.Synchronize {
|
||||
logger.V(4).Info("updating existing resource")
|
||||
label["policy.kyverno.io/synchronize"] = "enable"
|
||||
newResource.SetLabels(label)
|
||||
_, err := client.UpdateResource(genAPIVersion, genKind, genNamespace, newResource, false)
|
||||
if err != nil {
|
||||
logger.Error(err, "failed to update resource")
|
||||
return noGenResource, err
|
||||
}
|
||||
} else {
|
||||
label["policy.kyverno.io/synchronize"] = "disable"
|
||||
// if synchronize is false - update the label in already generated resource,
|
||||
// without comparing it with the generate policy data
|
||||
generatedObj, err := client.GetResource(genAPIVersion, genKind, genNamespace, genName)
|
||||
if err != nil {
|
||||
logger.Error(err, fmt.Sprintf("generated resource not found name:%v namespace:%v kind:%v", genName, genNamespace, genKind))
|
||||
return newGenResource, err
|
||||
}
|
||||
|
||||
currentGeneratedResourcelabel := generatedObj.GetLabels()
|
||||
currentSynclabel := currentGeneratedResourcelabel["policy.kyverno.io/synchronize"]
|
||||
|
||||
// update only if the labels mismatches
|
||||
if (!rule.Generation.Synchronize && currentSynclabel == "enable") ||
|
||||
(rule.Generation.Synchronize && currentSynclabel == "disable") {
|
||||
logger.V(4).Info("updating label in existing resource")
|
||||
currentGeneratedResourcelabel["policy.kyverno.io/synchronize"] = "disable"
|
||||
generatedObj.SetLabels(currentGeneratedResourcelabel)
|
||||
|
||||
_, err = client.UpdateResource(genAPIVersion, genKind, genNamespace, generatedObj, false)
|
||||
if err != nil {
|
||||
logger.Error(err, "failed to update label in existing resource")
|
||||
return noGenResource, err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
logger.V(4).Info("updating label in existing resource")
|
||||
newResource.SetLabels(label)
|
||||
_, err := client.UpdateResource(genAPIVersion, genKind, genNamespace, newResource, false)
|
||||
if err != nil {
|
||||
logger.Error(err, "failed to update resource")
|
||||
return noGenResource, err
|
||||
}
|
||||
logger.V(2).Info("updated generate target resource")
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue