From 3363034f77b1c044d23b6538b6755ade86763c38 Mon Sep 17 00:00:00 2001 From: yike21 Date: Sun, 30 Apr 2023 20:55:25 +0800 Subject: [PATCH] add customizations for kustomize.toolkit.fluxcd.io/v1/Kustomization Signed-off-by: yike21 --- .../v1/Kustomization/customizations.yaml | 120 ++++++++++++++++++ .../testdata/desired-kustomization.yaml | 14 ++ .../testdata/observed-kustomization.yaml | 41 ++++++ .../Kustomization/testdata/status-file.yaml | 27 ++++ 4 files changed, 202 insertions(+) create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/customizations.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/desired-kustomization.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/observed-kustomization.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/status-file.yaml diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/customizations.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/customizations.yaml new file mode 100644 index 000000000..edbb9fefe --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/customizations.yaml @@ -0,0 +1,120 @@ +apiVersion: config.karmada.io/v1alpha1 +kind: ResourceInterpreterCustomization +metadata: + name: declarative-configuration-kustomization +spec: + target: + apiVersion: kustomize.toolkit.fluxcd.io/v1 + kind: Kustomization + customizations: + healthInterpretation: + luaScript: > + function InterpretHealth(observedObj) + if observedObj.status ~= nil and observedObj.status.conditions ~= nil then + for conditionIndex = 1, #observedObj.status.conditions do + if observedObj.status.conditions[conditionIndex].type == 'Ready' and observedObj.status.conditions[conditionIndex].status == 'True' and observedObj.status.conditions[conditionIndex].reason == 'ReconciliationSucceeded' then + return true + end + end + end + return false + end + statusAggregation: + luaScript: > + function AggregateStatus(desiredObj, statusItems) + if statusItems == nil then + return desiredObj + end + desiredObj.status = {} + desiredObj.status.conditions = {} + conditions = {} + local conditionsIndex = 1 + for i = 1, #statusItems do + if statusItems[i].status ~= nil and statusItems[i].status.lastAttemptedRevision ~= nil and statusItems[i].status.lastAttemptedRevision ~= '' then + desiredObj.status.lastAttemptedRevision = statusItems[i].status.lastAttemptedRevision + end + if statusItems[i].status ~= nil and statusItems[i].status.lastAppliedRevision ~= nil and statusItems[i].status.lastAppliedRevision ~= '' then + desiredObj.status.lastAppliedRevision = statusItems[i].status.lastAppliedRevision + end + if statusItems[i].status ~= nil and statusItems[i].status.lastHandledReconcileAt ~= nil and statusItems[i].status.lastHandledReconcileAt ~= '' then + desiredObj.status.lastHandledReconcileAt = statusItems[i].status.lastHandledReconcileAt + end + if statusItems[i].status ~= nil and statusItems[i].status.conditions ~= nil then + for conditionIndex = 1, #statusItems[i].status.conditions do + statusItems[i].status.conditions[conditionIndex].message = statusItems[i].clusterName..'='..statusItems[i].status.conditions[conditionIndex].message + hasCondition = false + for index = 1, #conditions do + if conditions[index].type == statusItems[i].status.conditions[conditionIndex].type and conditions[index].status == statusItems[i].status.conditions[conditionIndex].status and conditions[index].reason == statusItems[i].status.conditions[conditionIndex].reason then + conditions[index].message = conditions[index].message..', '..statusItems[i].status.conditions[conditionIndex].message + hasCondition = true + break + end + end + if not hasCondition then + conditions[conditionsIndex] = statusItems[i].status.conditions[conditionIndex] + conditionsIndex = conditionsIndex + 1 + end + end + end + end + desiredObj.status.observedGeneration = desiredObj.metadata.generation + desiredObj.status.conditions = conditions + return desiredObj + end + retention: + luaScript: > + function Retain(desiredObj, observedObj) + if observedObj.spec.suspend ~= nil then + desiredObj.spec.suspend = observedObj.spec.suspend + end + return desiredObj + end + statusReflection: + luaScript: > + function ReflectStatus (observedObj) + status = {} + if observedObj == nil or observedObj.status == nil then + return status + end + status.conditions = observedObj.status.conditions + status.lastAppliedRevision = observedObj.status.lastAppliedRevision + status.lastAttemptedRevision = observedObj.status.lastAttemptedRevision + status.lastHandledReconcileAt = observedObj.status.lastHandledReconcileAt + return status + end + dependencyInterpretation: + luaScript: > + function GetDependencies(desiredObj) + dependentSecrets = {} + dependentSas = {} + refs = {} + local idx = 1 + if desiredObj.spec.decryption ~= nil and desiredObj.spec.decryption.secretRef ~= nil and desiredObj.spec.decryption.secretRef.name ~= '' then + dependentSecrets[desiredObj.spec.decryption.secretRef.name] = true + end + if desiredObj.spec.kubeConfig ~= nil and desiredObj.spec.kubeConfig.secretRef ~= nil and desiredObj.spec.kubeConfig.secretRef.name ~= '' then + dependentSecrets[desiredObj.spec.kubeConfig.secretRef.name] = true + end + if desiredObj.spec.serviceAccountName ~= nil and desiredObj.spec.serviceAccountName ~= '' then + dependentSas[desiredObj.spec.serviceAccountName] = true + end + for key, value in pairs(dependentSecrets) do + dependObj = {} + dependObj.apiVersion = 'v1' + dependObj.kind = 'Secret' + dependObj.name = key + dependObj.namespace = desiredObj.metadata.namespace + refs[idx] = dependObj + idx = idx + 1 + end + for key, value in pairs(dependentSas) do + dependObj = {} + dependObj.apiVersion = 'v1' + dependObj.kind = 'ServiceAccount' + dependObj.name = key + dependObj.namespace = desiredObj.metadata.namespace + refs[idx] = dependObj + idx = idx + 1 + end + return refs + end diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/desired-kustomization.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/desired-kustomization.yaml new file mode 100644 index 000000000..27531a4b3 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/desired-kustomization.yaml @@ -0,0 +1,14 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: sample + namespace: test-kustomization +spec: + interval: 10m + targetNamespace: test-kustomization + sourceRef: + kind: GitRepository + name: sample + path: "./kustomize" + prune: true + timeout: 1m diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/observed-kustomization.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/observed-kustomization.yaml new file mode 100644 index 000000000..d0f960912 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/observed-kustomization.yaml @@ -0,0 +1,41 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: sample + namespace: test-kustomization +spec: + interval: 10m + targetNamespace: test-kustomization + sourceRef: + kind: GitRepository + name: sample + path: "./kustomize" + prune: true + timeout: 1m + serviceAccountName: fake-sa + suspend: true + decryption: + secretRef: + name: fake-decryption-secret + kubeConfig: + secretRef: + name: fake--decryption-secret +status: + conditions: + - lastTransitionTime: "2023-04-30T12:51:06Z" + message: 'Applied revision: master@sha1:0647aea75b85755411b007a290b9321668370be5' + observedGeneration: 1 + reason: ReconciliationSucceeded + status: "True" + type: Ready + inventory: + entries: + - id: test-kustomization_podinfo__Service + v: v1 + - id: test-kustomization_podinfo_apps_Deployment + v: v1 + - id: test-kustomization_podinfo_autoscaling_HorizontalPodAutoscaler + v: v2 + lastAppliedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5 + lastAttemptedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5 + observedGeneration: 1 diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/status-file.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/status-file.yaml new file mode 100644 index 000000000..f0cfa3ac4 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/kustomize.toolkit.fluxcd.io/v1/Kustomization/testdata/status-file.yaml @@ -0,0 +1,27 @@ +applied: true +clusterName: member1 +health: Healthy +status: + conditions: + - lastTransitionTime: "2023-04-30T12:51:06Z" + message: 'Applied revision: master@sha1:0647aea75b85755411b007a290b9321668370be5' + observedGeneration: 1 + reason: ReconciliationSucceeded + status: "True" + type: Ready + lastAppliedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5 + lastAttemptedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5 +--- +applied: true +clusterName: member3 +health: Healthy +status: + conditions: + - lastTransitionTime: "2023-04-30T12:51:06Z" + message: 'Applied revision: master@sha1:0647aea75b85755411b007a290b9321668370be5' + observedGeneration: 1 + reason: ReconciliationSucceeded + status: "True" + type: Ready + lastAppliedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5 + lastAttemptedRevision: master@sha1:0647aea75b85755411b007a290b9321668370be5