Merge pull request #3366 from yike21/bundle-kruise-resources-BroadcastJob
add customizations for apps.krusie.io/v1alpha1/BroadcastJob
This commit is contained in:
commit
8639977d2b
|
@ -0,0 +1,161 @@
|
|||
apiVersion: config.karmada.io/v1alpha1
|
||||
kind: ResourceInterpreterCustomization
|
||||
metadata:
|
||||
name: declarative-configuration-broadcastjob
|
||||
spec:
|
||||
target:
|
||||
apiVersion: apps.kruise.io/v1alpha1
|
||||
kind: BroadcastJob
|
||||
customizations:
|
||||
replicaResource:
|
||||
luaScript: >
|
||||
local kube = require("kube")
|
||||
function GetReplicas(obj)
|
||||
replica = 1
|
||||
if obj.spec.parallelism ~= nil then
|
||||
replica = obj.spec.parallelism
|
||||
end
|
||||
requirement = kube.accuratePodRequirements(obj.spec.template)
|
||||
return replica, requirement
|
||||
end
|
||||
replicaRevision:
|
||||
luaScript: >
|
||||
function ReviseReplica(obj, replica)
|
||||
obj.spec.parallelism = replica
|
||||
return obj
|
||||
end
|
||||
healthInterpretation:
|
||||
luaScript: >
|
||||
function InterpretHealth(observedObj)
|
||||
if observedObj.status.desired == 0 or observedObj.status.failed ~= 0 then
|
||||
return false
|
||||
end
|
||||
if observedObj.status.succeeded == 0 and observedObj.status.active == 0 then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
statusAggregation:
|
||||
luaScript: >
|
||||
function AggregateStatus(desiredObj, statusItems)
|
||||
if statusItems == nil then
|
||||
return desiredObj
|
||||
end
|
||||
if desiredObj.status == nil then
|
||||
desiredObj.status = {}
|
||||
end
|
||||
if desiredObj.status.conditions == nil then
|
||||
desiredObj.status.conditions = {}
|
||||
end
|
||||
conditions = {}
|
||||
active = 0
|
||||
succeeded = 0
|
||||
failed = 0
|
||||
desired = 0
|
||||
phase = ''
|
||||
successfulJobs = 0
|
||||
completionTime = {}
|
||||
jobFailed = {}
|
||||
type = ''
|
||||
conditionsIndex = 0
|
||||
for i = 1, #statusItems do
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.active ~= nil then
|
||||
active = active + statusItems[i].status.active
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.succeeded ~= nil then
|
||||
succeeded = succeeded + statusItems[i].status.succeeded
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.failed ~= nil then
|
||||
failed = failed + statusItems[i].status.failed
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.desired ~= nil then
|
||||
desired = desired + statusItems[i].status.desired
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.phase ~= nil then
|
||||
phase = statusItems[i].status.phase
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.completionTime ~= nil then
|
||||
completionTime = statusItems[i].status.completionTime
|
||||
end
|
||||
if statusItems[i].status ~= nil and statusItems[i].status.conditions ~= nil then
|
||||
for conditionIndex = 1, #statusItems[i].status.conditions do
|
||||
if statusItems[i].status.conditions[conditionIndex].type == 'Complete' and statusItems[i].status.conditions[conditionIndex].status == 'True' then
|
||||
type = statusItems[i].status.conditions[conditionIndex].type
|
||||
break
|
||||
end
|
||||
if statusItems[i].status.conditions[conditionIndex].type == 'Failed' and statusItems[i].status.conditions[conditionIndex].status == 'True' then
|
||||
type = statusItems[i].status.conditions[conditionIndex].type
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if type == 'Complete' then
|
||||
successfulJobs = successfulJobs + 1
|
||||
end
|
||||
if type == 'Failed' then
|
||||
jobFailedNextIndex = #jobFailed + 1
|
||||
jobFailed[jobFailedNextIndex] = statusItems[i].clusterName
|
||||
end
|
||||
end
|
||||
if #jobFailed > 0 then
|
||||
condition = {}
|
||||
condition.type = 'Failed'
|
||||
condition.status = 'True'
|
||||
condition.reason = 'JobFailed'
|
||||
condition.message = 'Job executed failed in member clusters: '
|
||||
for i = 1, #jobFailed - 1 do
|
||||
condition.message = condition.message..jobFailed[i]..', '
|
||||
end
|
||||
condition.message = condition.message..jobFailed[#jobFailed]
|
||||
conditionsIndex = conditionsIndex + 1
|
||||
conditions[conditionsIndex] = condition
|
||||
end
|
||||
if successfulJobs == #statusItems and successfulJobs > 0 then
|
||||
condition = {}
|
||||
condition.type = 'Completed'
|
||||
condition.status = 'True'
|
||||
condition.reason = 'Completed'
|
||||
condition.message = 'Job completed'
|
||||
conditionsIndex = conditionsIndex + 1
|
||||
conditions[conditionsIndex] = condition
|
||||
end
|
||||
desiredObj.status.active = active
|
||||
desiredObj.status.succeeded = succeeded
|
||||
desiredObj.status.failed = failed
|
||||
desiredObj.status.desired = desired
|
||||
desiredObj.status.phase = phase
|
||||
desiredObj.status.conditions = conditions
|
||||
return desiredObj
|
||||
end
|
||||
retention:
|
||||
luaScript: >
|
||||
function Retain(desiredObj, observedObj)
|
||||
if observedObj.spec.template.metadata ~= nil and observedObj.spec.template.metadata.labels ~= nil then
|
||||
desiredObj.spec.template.metadata.labels = observedObj.spec.template.metadata.labels
|
||||
return desiredObj
|
||||
end
|
||||
end
|
||||
statusReflection:
|
||||
luaScript: >
|
||||
function ReflectStatus (observedObj)
|
||||
status = {}
|
||||
if observedObj == nil or observedObj.status == nil then
|
||||
return status
|
||||
end
|
||||
status.conditions = observedObj.status.conditions
|
||||
status.startTime = observedObj.status.startTime
|
||||
status.completionTime = observedObj.status.completionTime
|
||||
status.active = observedObj.status.active
|
||||
status.succeeded = observedObj.status.succeeded
|
||||
status.failed = observedObj.status.failed
|
||||
status.desired = observedObj.status.desired
|
||||
status.phase = observedObj.status.phase
|
||||
return status
|
||||
end
|
||||
dependencyInterpretation:
|
||||
luaScript: >
|
||||
local kube = require("kube")
|
||||
function GetDependencies(desiredObj)
|
||||
refs = kube.getPodDependencies(desiredObj.spec.template, desiredObj.metadata.namespace)
|
||||
return refs
|
||||
end
|
|
@ -0,0 +1,36 @@
|
|||
apiVersion: apps.kruise.io/v1alpha1
|
||||
kind: BroadcastJob
|
||||
metadata:
|
||||
labels:
|
||||
app: sample
|
||||
name: sample
|
||||
namespace: test-bcj
|
||||
spec:
|
||||
parallelism: 1
|
||||
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: Always
|
||||
activeDeadlineSeconds: 10
|
|
@ -0,0 +1,51 @@
|
|||
apiVersion: apps.kruise.io/v1alpha1
|
||||
kind: BroadcastJob
|
||||
metadata:
|
||||
labels:
|
||||
app: sample
|
||||
name: sample
|
||||
namespace: test-bcj
|
||||
spec:
|
||||
parallelism: 1
|
||||
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: Always
|
||||
activeDeadlineSeconds: 10
|
||||
status:
|
||||
active: 0
|
||||
completionTime: "2023-04-06T15:01:47Z"
|
||||
conditions:
|
||||
- lastProbeTime: "2023-04-06T15:01:47Z"
|
||||
lastTransitionTime: "2023-04-06T15:01:47Z"
|
||||
message: Job test-bcj/sample was active longer than specified deadline
|
||||
reason: Failed
|
||||
status: "True"
|
||||
type: Failed
|
||||
desired: 1
|
||||
failed: 1
|
||||
phase: failed
|
||||
startTime: "2023-04-06T15:01:37Z"
|
||||
succeeded: 0
|
|
@ -0,0 +1,37 @@
|
|||
applied: true
|
||||
clusterName: member1
|
||||
health: Healthy
|
||||
status:
|
||||
active: 0
|
||||
completionTime: "2023-04-06T15:01:47Z"
|
||||
conditions:
|
||||
- lastProbeTime: "2023-04-06T15:01:47Z"
|
||||
lastTransitionTime: "2023-04-06T15:01:47Z"
|
||||
message: Job test-bcj/sample was active longer than specified deadline
|
||||
reason: Failed
|
||||
status: "True"
|
||||
type: Failed
|
||||
desired: 1
|
||||
failed: 1
|
||||
phase: failed
|
||||
startTime: "2023-04-06T15:01:37Z"
|
||||
succeeded: 0
|
||||
---
|
||||
applied: true
|
||||
clusterName: member3
|
||||
health: Healthy
|
||||
status:
|
||||
active: 0
|
||||
completionTime: "2023-04-06T15:01:47Z"
|
||||
conditions:
|
||||
- lastProbeTime: "2023-04-06T15:01:47Z"
|
||||
lastTransitionTime: "2023-04-06T15:01:47Z"
|
||||
message: Job test-bcj/sample was active longer than specified deadline
|
||||
reason: Failed
|
||||
status: "True"
|
||||
type: Failed
|
||||
desired: 1
|
||||
failed: 1
|
||||
phase: failed
|
||||
startTime: "2023-04-06T15:01:37Z"
|
||||
succeeded: 0
|
Loading…
Reference in New Issue