From 9628830a392ff83e8eb1a4e2b98e605ba8d4d0c1 Mon Sep 17 00:00:00 2001 From: yike21 Date: Wed, 5 Apr 2023 19:57:24 +0800 Subject: [PATCH] add customizations for apps.krusie.io/v1alpha1/AdvancedCronJob Signed-off-by: yike21 --- .../v1alpha1/CronJob/customizations.yaml | 54 +++++++++++++++++++ .../CronJob/testdata/desired-acj-nginx.yaml | 38 +++++++++++++ .../CronJob/testdata/observed-acj-nginx.yaml | 48 +++++++++++++++++ .../CronJob/testdata/status-file.yaml | 27 ++++++++++ 4 files changed, 167 insertions(+) create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/customizations.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/desired-acj-nginx.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/observed-acj-nginx.yaml create mode 100644 pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/status-file.yaml diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/customizations.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/customizations.yaml new file mode 100644 index 000000000..ebd4adb64 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/customizations.yaml @@ -0,0 +1,54 @@ +apiVersion: config.karmada.io/v1alpha1 +kind: ResourceInterpreterCustomization +metadata: + name: declarative-configuration-advancedcronjob +spec: + target: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + customizations: + statusAggregation: + luaScript: > + function AggregateStatus(desiredObj, statusItems) + if statusItems == nil then + return desiredObj + end + if desiredObj.status == nil then + desiredObj.status = {} + end + active = {} + type = '' + lastScheduleTime = {} + for i = 1, #statusItems do + if statusItems[i].status ~= nil and statusItems[i].status.active ~= nil then + for statusActiveIndex = 1, #statusItems[i].status.active do + nextIndex = #active + 1 + active[nextIndex] = statusItems[i].status.active[statusActiveIndex] + end + end + if statusItems[i].status ~= nil and statusItems[i].status.type ~= nil then + type = statusItems[i].status.type + end + if statusItems[i].status ~= nil and statusItems[i].status.lastScheduleTime ~= nil then + lastScheduleTime = statusItems[i].status.lastScheduleTime + end + end + desiredObj.status.active = active + desiredObj.status.type = type + desiredObj.status.lastScheduleTime = lastScheduleTime + return desiredObj + end + dependencyInterpretation: + luaScript: > + local kube = require("kube") + function GetDependencies(desiredObj) + template = {} + if desiredObj.spec.template.jobTemplate ~= nil then + template = desiredObj.spec.template.jobTemplate.spec.template + end + if desiredObj.spec.template.broadcastJobTemplate ~= nil then + template = desiredObj.spec.template.broadcastJobTemplate.spec.template + end + refs = kube.getPodDependencies(template, desiredObj.metadata.namespace) + return refs + end diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/desired-acj-nginx.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/desired-acj-nginx.yaml new file mode 100644 index 000000000..a44917037 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/desired-acj-nginx.yaml @@ -0,0 +1,38 @@ +apiVersion: apps.kruise.io/v1alpha1 +kind: AdvancedCronJob +metadata: + labels: + app: sample + name: sample + namespace: test-acj +spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + metadata: + labels: + app: sample + spec: + restartPolicy: Never + volumes: + - name: configmap + configMap: + name: my-sample-config + containers: + - name: nginx + image: nginx:alpine + env: + - name: logData + valueFrom: + configMapKeyRef: + name: mysql-config + key: log + - name: lowerData + valueFrom: + configMapKeyRef: + name: mysql-config + key: lower + completionPolicy: + type: Never diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/observed-acj-nginx.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/observed-acj-nginx.yaml new file mode 100644 index 000000000..14df79092 --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/observed-acj-nginx.yaml @@ -0,0 +1,48 @@ +apiVersion: apps.kruise.io/v1alpha1 +kind: AdvancedCronJob +metadata: + labels: + app: sample + name: sample + namespace: test-acj +spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + metadata: + labels: + app: sample + spec: + restartPolicy: Never + volumes: + - name: configmap + configMap: + name: my-sample-config + containers: + - name: nginx + image: nginx:alpine + env: + - name: logData + valueFrom: + configMapKeyRef: + name: mysql-config + key: log + - name: lowerData + valueFrom: + configMapKeyRef: + name: mysql-config + key: lower + completionPolicy: + type: Never +status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + resourceVersion: "3635081" + uid: d1f3c194-d650-4cce-b23d-307a445bb92e + lastScheduleTime: "2023-04-13T09:28:00Z" + type: BroadcastJob diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/status-file.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/status-file.yaml new file mode 100644 index 000000000..adf7db3fd --- /dev/null +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/CronJob/testdata/status-file.yaml @@ -0,0 +1,27 @@ +applied: true +clusterName: member1 +health: Healthy +status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + resourceVersion: "3636404" + uid: f96013ef-2869-49d7-adf3-8f7231cc5e2a + lastScheduleTime: "2023-04-13T09:30:00Z" + type: BroadcastJob +--- +applied: true +clusterName: member3 +health: Healthy +status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + resourceVersion: "3635081" + uid: d1f3c194-d650-4cce-b23d-307a445bb92e + lastScheduleTime: "2023-04-13T09:30:00Z" + type: BroadcastJob