def test_docker_agent_deploy_flow_run_config(api, image_on_run_config): if image_on_run_config: storage = Local() image = "on-run-config" run = DockerRun(image=image, env={"TESTING": "VALUE"}) else: storage = Docker( registry_url="testing", image_name="on-storage", image_tag="tag" ) image = "testing/on-storage:tag" run = DockerRun(env={"TESTING": "VALUE"}) agent = DockerAgent() agent.deploy_flow( flow_run=GraphQLResult( { "flow": GraphQLResult( { "id": "foo", "storage": storage.serialize(), "run_config": run.serialize(), "core_version": "0.13.11", } ), "id": "id", "name": "name", } ) ) assert api.create_container.called assert api.create_container.call_args[0][0] == image assert api.create_container.call_args[1]["environment"]["TESTING"] == "VALUE"
def test_docker_agent_deploy_flow_run_config(api, run_kind, has_docker_storage): if has_docker_storage: storage = Docker(registry_url="testing", image_name="on-storage", image_tag="tag") image = "testing/on-storage:tag" else: storage = Local() image = "on-run-config" if run_kind == "docker" else "prefecthq/prefect:0.13.11" if run_kind == "docker": env = {"TESTING": "VALUE"} host_config = {"auto_remove": False, "shm_size": "128m"} exp_host_config = { "auto_remove": False, "extra_hosts": { "host.docker.internal": "host-gateway" }, "shm_size": "128m", } run = DockerRun(image=image, env=env, host_config=host_config) else: env = {} host_config = {} exp_host_config = { "auto_remove": True, "extra_hosts": { "host.docker.internal": "host-gateway" }, } run = None if run_kind == "missing" else UniversalRun() agent = DockerAgent() agent.deploy_flow(flow_run=GraphQLResult({ "flow": GraphQLResult({ "id": "foo", "name": "flow-name", "storage": storage.serialize(), "core_version": "0.13.11", }), "run_config": run.serialize() if run else None, "id": "id", "name": "name", })) assert api.create_container.called assert api.create_container.call_args[0][0] == image res_env = api.create_container.call_args[1]["environment"] for k, v in env.items(): assert res_env[k] == v res_host_config = api.create_host_config.call_args[1] for k, v in exp_host_config.items(): assert res_host_config[k] == v
def test_api_url_can_be_overridden_with_run_config(api): agent = DockerAgent(env_vars={"PREFECT__CLOUD__API": "FOO"}) run = DockerRun(env={"PREFECT__CLOUD__API": "BAR"}, ) env_vars = agent.populate_env_vars( GraphQLResult({ "id": "id", "name": "name", "flow": { "id": "foo" }, "run_config": run.serialize(), }), "test-image", run_config=run, ) assert env_vars["PREFECT__CLOUD__API"] == "BAR"
def test_populate_env_vars_from_run_config(api): agent = DockerAgent(env_vars={"KEY1": "VAL1", "KEY2": "VAL2"}) run = DockerRun( env={"KEY2": "OVERRIDE", "PREFECT__LOGGING__LEVEL": "TEST"}, ) env_vars = agent.populate_env_vars( GraphQLResult( { "id": "id", "name": "name", "flow": {"id": "foo", "run_config": run.serialize()}, } ), run, ) assert env_vars["KEY1"] == "VAL1" assert env_vars["KEY2"] == "OVERRIDE" assert env_vars["PREFECT__LOGGING__LEVEL"] == "TEST"
def test_docker_agent_deploy_flow_run_config(api, run_kind, has_docker_storage): if has_docker_storage: storage = Docker( registry_url="testing", image_name="on-storage", image_tag="tag" ) image = "testing/on-storage:tag" else: storage = Local() image = "on-run-config" if run_kind == "docker" else "prefecthq/prefect:0.13.11" if run_kind == "docker": env = {"TESTING": "VALUE"} run = DockerRun(image=image, env=env) else: env = {} run = None if run_kind == "missing" else UniversalRun() agent = DockerAgent() agent.deploy_flow( flow_run=GraphQLResult( { "flow": GraphQLResult( { "id": "foo", "name": "flow-name", "storage": storage.serialize(), "core_version": "0.13.11", } ), "run_config": run.serialize() if run else None, "id": "id", "name": "name", } ) ) assert api.create_container.called assert api.create_container.call_args[0][0] == image res_env = api.create_container.call_args[1]["environment"] for k, v in env.items(): assert res_env[k] == v
def test_prefect_logging_level_override_logic(config, agent_env_vars, run_config_env_vars, expected_logging_level, api): with set_temporary_config(config): agent = DockerAgent(env_vars=agent_env_vars) run = DockerRun(env=run_config_env_vars) env_vars = agent.populate_env_vars( GraphQLResult({ "id": "id", "name": "name", "flow": { "id": "foo" }, "run_config": run.serialize(), }), "test-image", run_config=run, ) assert env_vars["PREFECT__LOGGING__LEVEL"] == expected_logging_level