Skip to content

Commit ff7e097

Browse files
authored
Merge pull request #6697 from mszacillo/flinkdep-interpreter
Adding componentResource calculation for FlinkDeployment
2 parents 1b86263 + 5c64613 commit ff7e097

File tree

1 file changed

+104
-0
lines changed
  • pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/flink.apache.org/v1beta1/FlinkDeployment

1 file changed

+104
-0
lines changed

pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/flink.apache.org/v1beta1/FlinkDeployment/customizations.yaml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,110 @@ spec:
3232
end
3333
return observedObj.status.error ~= nil
3434
end
35+
componentResource:
36+
luaScript: >
37+
local kube = require("kube")
38+
39+
local function isempty(s)
40+
return s == nil or s == ''
41+
end
42+
43+
local function qty(v)
44+
if v == nil then return nil end
45+
return kube.getResourceQuantity(v)
46+
end
47+
48+
-- Safe fetch of deeply nested table fields.
49+
local function get(obj, path)
50+
local cur = obj
51+
for i = 1, #path do
52+
if cur == nil then return nil end
53+
cur = cur[path[i]]
54+
end
55+
return cur
56+
end
57+
58+
-- Normalize possibly-string numbers with a default.
59+
local function to_num(v, default)
60+
if v == nil or v == '' then return default end
61+
local n = tonumber(v)
62+
return n ~= nil and n or default
63+
end
64+
65+
local function apply_pod_template(pt_spec, requires)
66+
if pt_spec == nil then return end
67+
68+
local nodeSelector = pt_spec.nodeSelector
69+
local tolerations = pt_spec.tolerations
70+
local priority = pt_spec.priorityClassName
71+
72+
-- Only create nodeClaim if there’s content
73+
if nodeSelector ~= nil or tolerations ~= nil then
74+
requires.nodeClaim = requires.nodeClaim or {}
75+
requires.nodeClaim.nodeSelector = nodeSelector
76+
requires.nodeClaim.tolerations = tolerations
77+
end
78+
79+
if not isempty(priority) then
80+
requires.priorityClassName = priority
81+
end
82+
end
83+
84+
function GetComponents(observedObj)
85+
local components = {}
86+
local pt_spec = get(observedObj, {"spec","podTemplate","spec"})
87+
88+
-- ===== JobManager =====
89+
local jm_replicas = to_num(get(observedObj, {"spec","jobManager","replicas"}), 1)
90+
91+
local jm_requires = {
92+
resourceRequest = {},
93+
}
94+
95+
local jm_cpu = get(observedObj, {"spec","jobManager","resource","cpu"})
96+
local jm_memory = get(observedObj, {"spec","jobManager","resource","memory"})
97+
jm_requires.resourceRequest.cpu = qty(jm_cpu)
98+
jm_requires.resourceRequest.memory = qty(jm_memory)
99+
apply_pod_template(pt_spec, jm_requires)
100+
101+
local jobManagerComponent = {
102+
name = "jobmanager",
103+
replicas = jm_replicas,
104+
replicaRequirements = jm_requires,
105+
}
106+
table.insert(components, jobManagerComponent)
107+
108+
-- ===== TaskManager =====
109+
local tm_replicas = to_num(get(observedObj, {"spec","taskManager","replicas"}), nil)
110+
if tm_replicas == nil then
111+
local parallelism = to_num(get(observedObj, {"spec","job","parallelism"}), nil)
112+
local task_slots = to_num(get(observedObj, {"spec","flinkConfiguration","taskmanager.numberOfTaskSlots"}), nil)
113+
if parallelism == nil or task_slots == nil or task_slots == 0 then
114+
tm_replicas = 1
115+
else
116+
tm_replicas = math.ceil(parallelism / task_slots)
117+
end
118+
end
119+
120+
local tm_requires = {
121+
resourceRequest = {},
122+
}
123+
124+
local tm_cpu = get(observedObj, {"spec","taskManager","resource","cpu"})
125+
local tm_memory = get(observedObj, {"spec","taskManager","resource","memory"})
126+
tm_requires.resourceRequest.cpu = qty(tm_cpu)
127+
tm_requires.resourceRequest.memory = qty(tm_memory)
128+
apply_pod_template(pt_spec, tm_requires)
129+
130+
local taskManagerComponent = {
131+
name = "taskmanager",
132+
replicas = tm_replicas,
133+
replicaRequirements = tm_requires,
134+
}
135+
table.insert(components, taskManagerComponent)
136+
137+
return components
138+
end
35139
replicaResource:
36140
luaScript: >
37141
local kube = require("kube")

0 commit comments

Comments
 (0)