Skip to content

Commit c3ccb62

Browse files
authored
fix(agent): change COPY_RESOLVE to COPY_RESOLV (#18)
1 parent ed98fa6 commit c3ccb62

File tree

2 files changed

+79
-31
lines changed

2 files changed

+79
-31
lines changed

agent/skyhook-agent/src/skyhook_agent/controller.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,22 @@ def summarize_check_results(results: list[bool], step_data: dict[Mode, list[Step
339339

340340
return False
341341

342-
def do_interrupt(interrupt_data: str, root_mount: str, copy_dir: str, on_host: bool, config_data: dict) -> bool:
342+
def do_interrupt(interrupt_data: str, root_mount: str, copy_dir: str, on_host: bool) -> bool:
343343
"""
344344
Run an interrupt if there hasn't been an interrupt already for the skyhook ID.
345345
"""
346346

347-
348347
SKYHOOK_RESOURCE_ID, _ = _get_env_config()
349348

349+
# Interrupts don't really have config data we can read from the Package as it is run standalone.
350+
# So read it off of SKYHOOK_RESOURCE_ID instead
351+
# customer-f5a1d42e-74e5-4606-8bbc-b504fbe0074d-1_tuning_2.0.2
352+
_, package, version = SKYHOOK_RESOURCE_ID.split("_")
353+
config_data = {
354+
"package_name": package,
355+
"package_version": version,
356+
}
357+
350358
interrupt = interrupts.inflate(interrupt_data)
351359

352360
# Check if the interrupt has already been run for this particular skyhook resource
@@ -392,6 +400,9 @@ def main(mode: Mode, root_mount: str, copy_dir: str, interrupt_data: None|str, a
392400
logger.warning(f"This version of the Agent doesn't support the {mode} mode. Options are: {','.join(map(str, Mode))}.")
393401
return False
394402

403+
if mode == Mode.INTERRUPT:
404+
return do_interrupt(interrupt_data, root_mount, copy_dir, True)
405+
395406
_, SKYHOOK_DATA_DIR = _get_env_config()
396407

397408
# Check to see if the directory has already been copied down. If it hasn't assume that we
@@ -421,9 +432,6 @@ def main(mode: Mode, root_mount: str, copy_dir: str, interrupt_data: None|str, a
421432
return agent_main(mode, root_mount, copy_dir, config_data, interrupt_data, always_run_step)
422433

423434
def agent_main(mode: Mode, root_mount: str, copy_dir: str, config_data: dict, interrupt_data: None|str, always_run_step=False):
424-
425-
if mode == Mode.INTERRUPT:
426-
return do_interrupt(interrupt_data, root_mount, copy_dir, True, config_data)
427435

428436
# Pull out step_data so it matches with existing code
429437
step_data = config_data["modes"]
@@ -506,7 +514,7 @@ def cli(sys_argv: list[str]=sys.argv):
506514
# new way with interrupt data
507515
mode, root_mount, copy_dir, interrupt_data = args
508516

509-
if os.getenv("COPY_RESOLVE", "true").lower() == "true":
517+
if os.getenv("COPY_RESOLV", "true").lower() == "true":
510518
shutil.copyfile("/etc/resolv.conf", f"{root_mount}/etc/resolv.conf")
511519

512520
always_run_step = os.getenv("OVERLAY_ALWAYS_RUN_STEP", "false").lower() == "true"

agent/skyhook-agent/tests/test_controller.py

Lines changed: 65 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,13 +1088,18 @@ def test_interrupt_applies_all_commands(self, run_mock, datetime_mock):
10881088
],
10891089
}
10901090
with self._setup_for_main(steps) as (container_root_dir, config_data, root_dir):
1091-
controller.main(
1092-
Mode.INTERRUPT,
1093-
root_dir,
1094-
"copy_dir",
1095-
interrupts.ServiceRestart(["containerd",]).make_controller_input()
1096-
)
1091+
with set_env(SKYHOOK_RESOURCE_ID="scr-id-1_package_version"):
1092+
controller.main(
1093+
Mode.INTERRUPT,
1094+
root_dir,
1095+
"copy_dir",
1096+
interrupts.ServiceRestart(["containerd",]).make_controller_input()
1097+
)
10971098

1099+
config_data = {
1100+
"package_name": "package",
1101+
"package_version": "version"
1102+
}
10981103
run_mock.assert_has_calls([
10991104
mock.call(["systemctl", "daemon-reload"], controller.get_log_file(root_dir, "interrupts/service_restart_0", "copy_dir", config_data), on_host=True, root_mount=root_dir, write_cmds=True),
11001105
mock.call(["systemctl", "restart", "containerd"], controller.get_log_file(root_dir, "interrupts/service_restart_1", "copy_dir", config_data), on_host=True, root_mount=root_dir, write_cmds=True)
@@ -1103,38 +1108,38 @@ def test_interrupt_applies_all_commands(self, run_mock, datetime_mock):
11031108
@mock.patch("skyhook_agent.controller._run")
11041109
def test_interrupt_isnt_run_when_skyhook_resource_id_flag_is_there(self, run_mock):
11051110
run_mock.return_value = 0
1106-
SKYHOOK_RESOURCE_ID="foo"
1111+
SKYHOOK_RESOURCE_ID="scr-id-1_package_version"
11071112
with (tempfile.TemporaryDirectory() as dir,
11081113
set_env(SKYHOOK_RESOURCE_ID=SKYHOOK_RESOURCE_ID)):
11091114
os.makedirs(f"{controller.get_skyhook_directory(dir)}/interrupts/flags/{SKYHOOK_RESOURCE_ID}", exist_ok=True)
11101115
with open(f"{controller.get_skyhook_directory(dir)}/interrupts/flags/{SKYHOOK_RESOURCE_ID}/node_restart_0.complete", 'w') as f:
11111116
f.write("")
1112-
controller.do_interrupt(interrupts.NodeRestart().make_controller_input(), dir, "copy_dir", on_host=False, config_data=self.config_data)
1117+
controller.do_interrupt(interrupts.NodeRestart().make_controller_input(), dir, "copy_dir", on_host=False)
11131118

11141119
run_mock.assert_not_called()
11151120

11161121
@mock.patch("skyhook_agent.controller._run")
11171122
def test_interrupt_create_flags_per_cmd(self, run_mock):
11181123
run_mock.return_value = 0
1119-
SKYHOOK_RESOURCE_ID="foo"
1124+
SKYHOOK_RESOURCE_ID="scr-id-1_package_version"
11201125
with (tempfile.TemporaryDirectory() as dir,
11211126
set_env(SKYHOOK_RESOURCE_ID=SKYHOOK_RESOURCE_ID)):
11221127
interrupt_dir = f"{controller.get_skyhook_directory(dir)}/interrupts/flags/{SKYHOOK_RESOURCE_ID}"
11231128
interrupt = interrupts.ServiceRestart(["foo", "bar"])
1124-
controller.do_interrupt(interrupt.make_controller_input(), dir, "copy_dir", on_host=False, config_data=self.config_data)
1129+
controller.do_interrupt(interrupt.make_controller_input(), dir, "copy_dir", on_host=False)
11251130

11261131
for i in range(len(interrupt.interrupt_cmd)):
11271132
self.assertTrue(os.path.exists(f"{interrupt_dir}/{interrupt._type()}_{i}.complete"))
11281133

11291134
@mock.patch("skyhook_agent.controller._run")
11301135
def test_interrupt_failures_remove_flag(self, run_mock):
11311136
run_mock.side_effect = [0,1,0]
1132-
SKYHOOK_RESOURCE_ID="foo"
1137+
SKYHOOK_RESOURCE_ID="scr-id-1_package_version"
11331138
with (tempfile.TemporaryDirectory() as dir,
11341139
set_env(SKYHOOK_RESOURCE_ID=SKYHOOK_RESOURCE_ID)):
11351140
interrupt_dir = f"{controller.get_skyhook_directory(dir)}/interrupts/flags/{SKYHOOK_RESOURCE_ID}"
11361141
interrupt = interrupts.ServiceRestart(["foo", "bar"])
1137-
controller.do_interrupt(interrupt.make_controller_input(), dir, "copy_dir", on_host=False, config_data=self.config_data)
1142+
controller.do_interrupt(interrupt.make_controller_input(), dir, "copy_dir", on_host=False)
11381143

11391144
self.assertTrue(os.path.exists(f"{interrupt_dir}/{interrupt._type()}_0.complete"))
11401145
self.assertFalse(os.path.exists(f"{interrupt_dir}/{interrupt._type()}_1.complete"))
@@ -1156,50 +1161,85 @@ def test_interrupt_failure_fails_controller(self, run_mock, datetime_mock):
11561161
],
11571162
}
11581163
with self._setup_for_main(steps) as (container_root_dir, config_data, root_dir):
1159-
result = controller.main(
1160-
Mode.INTERRUPT,
1161-
root_dir,
1162-
"/tmp",
1163-
interrupts.ServiceRestart("containerd").make_controller_input()
1164-
)
1165-
1164+
with set_env(SKYHOOK_RESOURCE_ID="scr-id-1_package_version"):
1165+
result = controller.main(
1166+
Mode.INTERRUPT,
1167+
root_dir,
1168+
"/tmp",
1169+
interrupts.ServiceRestart("containerd").make_controller_input()
1170+
)
1171+
config_data = {
1172+
"package_name": "package",
1173+
"package_version": "version"
1174+
}
11661175
run_mock.assert_has_calls([
11671176
mock.call(["systemctl", "daemon-reload"], controller.get_log_file(root_dir, "interrupts/service_restart_0", "copy_dir", config_data), on_host=True, root_mount=root_dir, write_cmds=True)
11681177
])
11691178

11701179
self.assertEqual(result, True)
11711180

1181+
@mock.patch("skyhook_agent.controller.datetime")
1182+
@mock.patch("skyhook_agent.controller._run")
1183+
def test_interrupt_makes_config_from_skyhook_resource_id(self, run_mock, datetime_mock):
1184+
now_mock = mock.MagicMock()
1185+
datetime_mock.now.return_value = now_mock
1186+
now_mock.strftime.return_value = "12345"
1187+
run_mock.return_value = 0
1188+
steps = {
1189+
Mode.APPLY: [
1190+
Step("foo.sh", arguments=[]),
1191+
],
1192+
Mode.APPLY_CHECK: [
1193+
Step("foo_check.sh", arguments=[]),
1194+
],
1195+
}
1196+
with self._setup_for_main(steps) as (container_root_dir, config_data, root_dir):
1197+
with set_env(SKYHOOK_RESOURCE_ID="scr-id-1_package_version"):
1198+
result = controller.main(
1199+
Mode.INTERRUPT,
1200+
root_dir,
1201+
"/tmp",
1202+
interrupts.ServiceRestart("containerd").make_controller_input()
1203+
)
1204+
config_data = {
1205+
"package_name": "package",
1206+
"package_version": "version"
1207+
}
1208+
run_mock.assert_has_calls([
1209+
mock.call(["systemctl", "daemon-reload"], controller.get_log_file(root_dir, "interrupts/service_restart_0", "copy_dir", config_data), on_host=True, root_mount=root_dir, write_cmds=True)
1210+
])
1211+
11721212
@mock.patch("skyhook_agent.controller.main")
11731213
def test_interrupt_mode_reads_extra_argument(self, main_mock):
11741214
argv = ["controller.py", str(Mode.INTERRUPT), "root_mount", "copy_dir", "interrupt_data"]
1175-
with set_env(COPY_RESOLVE="false"):
1215+
with set_env(COPY_RESOLV="false"):
11761216
controller.cli(argv)
11771217

11781218
main_mock.assert_called_once_with(str(Mode.INTERRUPT), "root_mount", "copy_dir", "interrupt_data", False)
11791219

11801220
@mock.patch("skyhook_agent.controller.main")
11811221
def test_cli_overlay_always_run_step_is_correct(self, main_mock):
1182-
with set_env(OVERLAY_ALWAYS_RUN_STEP="true", COPY_RESOLVE="false"):
1222+
with set_env(OVERLAY_ALWAYS_RUN_STEP="true", COPY_RESOLV="false"):
11831223
controller.cli(["controller.py", str(Mode.APPLY), "root_mount", "copy_dir"])
11841224

11851225
main_mock.assert_called_once_with(str(Mode.APPLY), "root_mount", "copy_dir", None, True)
11861226
main_mock.reset_mock()
11871227

1188-
with set_env(OVERLAY_ALWAYS_RUN_STEP="false", COPY_RESOLVE="false"):
1228+
with set_env(OVERLAY_ALWAYS_RUN_STEP="false", COPY_RESOLV="false"):
11891229
controller.cli(["controller.py", str(Mode.APPLY), "root_mount", "copy_dir"])
11901230
main_mock.assert_called_once_with(str(Mode.APPLY), "root_mount", "copy_dir", None, False)
11911231

11921232
@mock.patch("skyhook_agent.controller.main")
11931233
@mock.patch("skyhook_agent.controller.shutil")
1194-
def test_cli_copy_resolve(self, shutil_mock, main_mock):
1234+
def test_cli_COPY_RESOLV(self, shutil_mock, main_mock):
11951235
argv = ["controller.py", str(Mode.APPLY), "root_mount", "copy_dir"]
1196-
with set_env(COPY_RESOLVE="true"):
1236+
with set_env(COPY_RESOLV="true"):
11971237
controller.cli(argv)
11981238

11991239
shutil_mock.copyfile.assert_called_once()
12001240
shutil_mock.copyfile.reset_mock()
12011241

1202-
with set_env(COPY_RESOLVE="false"):
1242+
with set_env(COPY_RESOLV="false"):
12031243
controller.cli(argv)
12041244

12051245
shutil_mock.copyfile.assert_not_called()

0 commit comments

Comments
 (0)