mirror of
https://github.com/saltstack/salt.git
synced 2025-04-10 06:41:40 +00:00
108 lines
2.9 KiB
Python
108 lines
2.9 KiB
Python
import os
|
|
|
|
from ptscripts import Context, command_group
|
|
|
|
cmd = command_group(name="container", help="Container Commands", description=__doc__)
|
|
|
|
|
|
def has_network(ctx, name):
|
|
p = ctx.run("docker", "network", "ls", capture=True)
|
|
return name in p.stdout.decode()
|
|
|
|
|
|
def create_network(ctx, name):
|
|
p = ctx.run(
|
|
"docker",
|
|
"network",
|
|
"create",
|
|
"-o",
|
|
"com.docker.network.driver.mtu=1500",
|
|
"--ipv6",
|
|
"--subnet",
|
|
"2001:db8::/64",
|
|
name,
|
|
)
|
|
if p.returncode != 0:
|
|
raise RuntimeError(f"docker network create returned {p.returncode}")
|
|
|
|
|
|
@cmd.command(
|
|
name="create",
|
|
arguments={
|
|
"image": {"help": "Name the container image to use."},
|
|
"name": {"help": "Name the container being created.", "default": ""},
|
|
},
|
|
)
|
|
def create(ctx: Context, image: str, name: str = ""):
|
|
onci = "GITHUB_WORKFLOW" in os.environ
|
|
workdir = "/salt"
|
|
home = "/root"
|
|
network = "ip6net"
|
|
if not onci and not has_network(ctx, network):
|
|
ctx.info(f"Creating docker network: {network}")
|
|
create_network(ctx, network)
|
|
if onci:
|
|
workdir = "/__w/salt/salt"
|
|
home = "/github/home"
|
|
env = {
|
|
"HOME": home,
|
|
"SKIP_REQUIREMENTS_INSTALL": "1",
|
|
"PRINT_TEST_SELECTION": "0",
|
|
"PRINT_TEST_PLAN_ONLY": "0",
|
|
"PRINT_SYSTEM_INFO": "0",
|
|
"RERUN_FAILURES": "0",
|
|
"SKIP_INITIAL_ONEDIR_FAILURES": "1",
|
|
"SKIP_INITIAL_GH_ACTIONS_FAILURES": "1",
|
|
"RAISE_DEPRECATIONS_RUNTIME_ERRORS": "1",
|
|
"LANG": "en_US.UTF-8",
|
|
"SHELL": "/bin/bash",
|
|
}
|
|
for var in [
|
|
"PIP_INDEX_URL",
|
|
"PIP_EXTRA_INDEX_URL",
|
|
"PIP_TRUSTED_HOST",
|
|
"PIP_DISABLE_PIP_VERSION_CHECK",
|
|
"SALT_TRANSPORT",
|
|
# Are both of these really needed?
|
|
"GITHUB_ACTIONS",
|
|
"GITHUB_ACTIONS_PIPELINE",
|
|
"CI",
|
|
"SKIP_CODE_COVERAGE",
|
|
"COVERAGE_CONTEXT",
|
|
"RERUN_FAILURES",
|
|
"COLUMNS",
|
|
]:
|
|
if var in os.environ:
|
|
env[var] = os.environ[var]
|
|
cmd = [
|
|
"/usr/bin/docker",
|
|
"create",
|
|
f"--name={name}",
|
|
"--privileged",
|
|
f"--workdir={workdir}",
|
|
"-v",
|
|
"/tmp/:/var/lib/docker",
|
|
]
|
|
for key in env:
|
|
cmd.extend(["-e", f"{key}={env[key]}"])
|
|
if onci:
|
|
cmd.extend(["-v", "/home/runner/work:/__w"])
|
|
else:
|
|
cmd.extend(["-v", f"{os.getcwd()}:/salt"])
|
|
cmd.extend(["--network", network])
|
|
if name:
|
|
cmd.extend(["--name", name])
|
|
cmd.extend(
|
|
[
|
|
"--entrypoint",
|
|
"/usr/lib/systemd/systemd",
|
|
image,
|
|
"--systemd",
|
|
"--unit",
|
|
"rescue.target",
|
|
],
|
|
)
|
|
ctx.info(f"command is: {cmd}")
|
|
ret = ctx.run(*cmd, capture=True, check=False)
|
|
if ret.returncode != 0:
|
|
ctx.warn(ret.stderr.decode())
|