Skip to content

Commit bfe3626

Browse files
authored
Merge pull request #199 from thom311/th/render-undefined-variables
[th/render-undefined-variables] task: rework setting template variables by moving to parent Task.get_template_args() #199
2 parents 0e0db48 + 82049d8 commit bfe3626

8 files changed

+61
-109
lines changed

pluginMeasureCpu.py

-7
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,6 @@ def __init__(self, ts: TestSettings, task_role: TaskRole, tenant: bool):
6161
)
6262
self.pod_name = f"tools-pod-{self.node_name}-measure-cpu"
6363

64-
def get_template_args(self) -> dict[str, str | list[str]]:
65-
return {
66-
**super().get_template_args(),
67-
"pod_name": self.pod_name,
68-
"test_image": tftbase.get_tft_test_image(),
69-
}
70-
7164
def initialize(self) -> None:
7265
super().initialize()
7366
self.render_file("Server Pod Yaml")

pluginMeasurePower.py

-7
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,6 @@ def __init__(self, ts: TestSettings, task_role: TaskRole, tenant: bool):
6969
)
7070
self.pod_name = f"tools-pod-{self.node_name}-measure-cpu"
7171

72-
def get_template_args(self) -> dict[str, str | list[str]]:
73-
return {
74-
**super().get_template_args(),
75-
"pod_name": self.pod_name,
76-
"test_image": tftbase.get_tft_test_image(),
77-
}
78-
7972
def initialize(self) -> None:
8073
super().initialize()
8174
self.render_file("Server Pod Yaml")

pluginValidateOffload.py

-7
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,6 @@ def __init__(
166166
self.perf_pod_name = perf_instance.pod_name
167167
self.perf_pod_type = perf_instance.pod_type
168168

169-
def get_template_args(self) -> dict[str, str | list[str]]:
170-
return {
171-
**super().get_template_args(),
172-
"pod_name": self.pod_name,
173-
"test_image": tftbase.get_tft_test_image(),
174-
}
175-
176169
def initialize(self) -> None:
177170
super().initialize()
178171
self.render_file("Server Pod Yaml")

task.py

+39-30
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121

2222
from ktoolbox import common
2323
from ktoolbox import host
24-
from ktoolbox import netdev
2524
from ktoolbox import kjinja2
25+
from ktoolbox import netdev
2626
from ktoolbox.k8sClient import K8sClient
2727

2828
import testConfig
@@ -332,22 +332,33 @@ def get_template_args(self) -> dict[str, str | list[str]]:
332332
"test_image": tftbase.get_tft_test_image(),
333333
"image_pull_policy": tftbase.get_tft_image_pull_policy(),
334334
"command": ["/usr/bin/container-entry-point.sh"],
335-
"args": [],
335+
"args": self._get_template_args_args(),
336336
"index": f"{self.index}",
337337
"node_name": self.node_name,
338+
"pod_name": self.pod_name,
339+
"port": self._get_template_args_port(),
338340
"secondary_network_nad": self.ts.connection.effective_secondary_network_nad,
339341
"use_secondary_network": (
340342
"1" if self.ts.connection.secondary_network_nad else ""
341343
),
342-
"resource_name": self.ts.connection.resource_name
343-
or Task._fetch_default_resource_name(
344-
self.client,
345-
self.get_namespace(),
346-
self.ts.connection.secondary_network_nad,
347-
)
348-
or "",
344+
"resource_name": (
345+
self.ts.connection.resource_name
346+
or Task._fetch_default_resource_name(
347+
self.client,
348+
self.get_namespace(),
349+
self.ts.connection.secondary_network_nad,
350+
)
351+
or ""
352+
),
353+
"default_network": self.node.default_network,
349354
}
350355

356+
def _get_template_args_port(self) -> str:
357+
return ""
358+
359+
def _get_template_args_args(self) -> list[str]:
360+
return []
361+
351362
def render_file(
352363
self,
353364
log_info: str,
@@ -371,7 +382,14 @@ def render_file(
371382
out_file=out_file_yaml,
372383
)
373384

374-
rendered_dict = yaml.safe_load(rendered)
385+
try:
386+
rendered_dict = yaml.safe_load(rendered)
387+
except Exception as e:
388+
logger.error(
389+
f'"{in_file_template}" rendered as {repr(rendered)} is not valid YAML: {e}'
390+
)
391+
raise
392+
375393
logger.debug(f'"{in_file_template}" contains: {json.dumps(rendered_dict)}')
376394

377395
def initialize(self) -> None:
@@ -765,18 +783,8 @@ def __init__(self, ts: TestSettings):
765783
self.out_file_yaml = out_file_yaml
766784
self.pod_name = pod_name
767785

768-
def get_template_args(self) -> dict[str, str | list[str]]:
769-
770-
extra_args: dict[str, str] = {}
771-
if self.connection_mode != ConnectionMode.EXTERNAL_IP:
772-
extra_args["pod_name"] = self.pod_name
773-
extra_args["port"] = f"{self.port}"
774-
775-
return {
776-
**super().get_template_args(),
777-
"default_network": self.ts.node_server.default_network,
778-
**extra_args,
779-
}
786+
def _get_template_args_port(self) -> str:
787+
return str(self.port)
780788

781789
def initialize(self) -> None:
782790
super().initialize()
@@ -793,6 +801,11 @@ def initialize(self) -> None:
793801
self.create_ingress_multi_network_policy(self.port)
794802
self.create_egress_multi_network_policy(self.port)
795803

804+
def _get_template_args_args(self) -> list[str]:
805+
if not self.exec_persistent:
806+
return []
807+
return self.cmd_line_args(for_template=True)
808+
796809
def confirm_server_alive(self) -> None:
797810
if self.connection_mode == ConnectionMode.EXTERNAL_IP:
798811
# Podman scenario
@@ -816,8 +829,11 @@ def confirm_server_alive(self) -> None:
816829
self.ts.event_server_alive.set()
817830

818831
@abstractmethod
832+
def cmd_line_args(self, *, for_template: bool = False) -> list[str]:
833+
raise RuntimeError()
834+
819835
def _create_setup_operation_get_thread_action_cmd(self) -> str:
820-
pass
836+
return shlex.join(self.cmd_line_args())
821837

822838
@abstractmethod
823839
def _create_setup_operation_get_cancel_action_cmd(self) -> str:
@@ -931,13 +947,6 @@ def __init__(self, ts: TestSettings, server: ServerTask):
931947
self.out_file_yaml = out_file_yaml
932948
self.pod_name = pod_name
933949

934-
def get_template_args(self) -> dict[str, str | list[str]]:
935-
return {
936-
**super().get_template_args(),
937-
"default_network": self.ts.node_client.default_network,
938-
"pod_name": self.pod_name,
939-
}
940-
941950
def initialize(self) -> None:
942951
super().initialize()
943952
self.render_file("Client Pod Yaml")

testTypeHttp.py

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import shlex
21
import time
32

43
from dataclasses import dataclass
@@ -34,7 +33,7 @@ def _create_server_client(self, ts: TestSettings) -> tuple[ServerTask, ClientTas
3433

3534

3635
class HttpServer(task.ServerTask):
37-
def cmd_line_args(self) -> list[str]:
36+
def cmd_line_args(self, *, for_template: bool = False) -> list[str]:
3837
return [
3938
"python3",
4039
"-m",
@@ -44,20 +43,6 @@ def cmd_line_args(self) -> list[str]:
4443
f"{self.port}",
4544
]
4645

47-
def get_template_args(self) -> dict[str, str | list[str]]:
48-
49-
extra_args: dict[str, str | list[str]] = {}
50-
if self.exec_persistent:
51-
extra_args["args"] = self.cmd_line_args()
52-
53-
return {
54-
**super().get_template_args(),
55-
**extra_args,
56-
}
57-
58-
def _create_setup_operation_get_thread_action_cmd(self) -> str:
59-
return shlex.join(self.cmd_line_args())
60-
6146
def _create_setup_operation_get_cancel_action_cmd(self) -> str:
6247
return "killall python3"
6348

testTypeIperf.py

+13-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import logging
21
import json
2+
import logging
33
import task
44

55
from collections.abc import Mapping
@@ -108,19 +108,18 @@ def can_run_reverse(self) -> bool:
108108

109109

110110
class IperfServer(task.ServerTask):
111-
def get_template_args(self) -> dict[str, str | list[str]]:
112-
113-
extra_args: dict[str, str | list[str]] = {}
114-
if self.exec_persistent:
115-
extra_args["args"] = [IPERF_EXE, "-s", "-p", f"{self.port}"]
116-
117-
return {
118-
**super().get_template_args(),
119-
**extra_args,
120-
}
121-
122-
def _create_setup_operation_get_thread_action_cmd(self) -> str:
123-
return f"{IPERF_EXE} -s -p {self.port} --one-off --json"
111+
def cmd_line_args(self, *, for_template: bool = False) -> list[str]:
112+
if for_template:
113+
extra_args = []
114+
else:
115+
extra_args = ["--one-off", "--json"]
116+
return [
117+
IPERF_EXE,
118+
"-s",
119+
"-p",
120+
f"{self.port}",
121+
*extra_args,
122+
]
124123

125124
def _create_setup_operation_get_cancel_action_cmd(self) -> str:
126125
return f"killall {IPERF_EXE}"

testTypeNetPerf.py

+7-13
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,13 @@ def _create_server_client(self, ts: TestSettings) -> tuple[ServerTask, ClientTas
7676

7777

7878
class NetPerfServer(task.ServerTask):
79-
def get_template_args(self) -> dict[str, str | list[str]]:
80-
81-
extra_args: dict[str, str | list[str]] = {}
82-
if self.exec_persistent:
83-
extra_args["args"] = [NETPERF_SERVER_EXE, "-p", f"{self.port}", "-N"]
84-
85-
return {
86-
**super().get_template_args(),
87-
**extra_args,
88-
}
89-
90-
def _create_setup_operation_get_thread_action_cmd(self) -> str:
91-
return f"{NETPERF_SERVER_EXE} -p {self.port} -N"
79+
def cmd_line_args(self, *, for_template: bool = False) -> list[str]:
80+
return [
81+
NETPERF_SERVER_EXE,
82+
"-p",
83+
f"{self.port}",
84+
"-N",
85+
]
9286

9387
def _create_setup_operation_get_cancel_action_cmd(self) -> str:
9488
return f"killall {NETPERF_SERVER_EXE}"

testTypeSimple.py

+1-15
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def _create_server_client(self, ts: TestSettings) -> tuple[ServerTask, ClientTas
3434

3535

3636
class SimpleServer(task.ServerTask):
37-
def cmd_line_args(self) -> list[str]:
37+
def cmd_line_args(self, *, for_template: bool = False) -> list[str]:
3838
return [
3939
CMD_SIMPLE_TCP_SERVER_CLIENT,
4040
"--server",
@@ -45,20 +45,6 @@ def cmd_line_args(self) -> list[str]:
4545
*(self.ts.cfg_descr.get_server().args or ()),
4646
]
4747

48-
def get_template_args(self) -> dict[str, str | list[str]]:
49-
50-
extra_args: dict[str, str | list[str]] = {}
51-
if self.exec_persistent:
52-
extra_args["args"] = self.cmd_line_args()
53-
54-
return {
55-
**super().get_template_args(),
56-
**extra_args,
57-
}
58-
59-
def _create_setup_operation_get_thread_action_cmd(self) -> str:
60-
return shlex.join(self.cmd_line_args())
61-
6248
def _create_setup_operation_get_cancel_action_cmd(self) -> str:
6349
return "killall python3"
6450

0 commit comments

Comments
 (0)