From 7b03b9307f82ce03b202d805e346801e91445632 Mon Sep 17 00:00:00 2001 From: istmxrein <maximilian.reinheimer@stud.h-da.de> Date: Tue, 13 Sep 2022 15:10:09 +0200 Subject: [PATCH] add feature to use floating ipv4 address for ssh connection (default) --- Dockerfile | 13 +++++++++---- entrypoint.sh | 2 +- env.py | 5 +++-- prepare.py | 13 +++++++++++-- run.py | 5 ++++- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 54aabd3..0e0671f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,18 +11,23 @@ LABEL maintainer="Max Reinheimer <max@reinheimer.dev>" \ description="A GitLab runner image with openstack custom executor." \ io.k8s.description="A GitLab runner image with openstack custom executor." -COPY cleanup.py env.py config.sh prepare.py run.py requirements.txt /data/ -COPY entrypoint.sh /usr/bin/entrypoint +COPY requirements.txt /data/ + +WORKDIR /data RUN apt-get update && apt-get -y install curl dumb-init gcc libffi-dev && \ curl -L --output /usr/bin/gitlab-runner "${GITLAB_RUNNER_URL}" && \ pip3 install -r /data/requirements.txt && \ - chmod +x /data/* /usr/bin/entrypoint /usr/bin/gitlab-runner && \ + chmod +x /usr/bin/gitlab-runner && \ useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash && \ apt-get remove -y gcc curl && apt autoremove -y && apt-get clean +COPY cleanup.py env.py config.sh prepare.py run.py /data/ +COPY entrypoint.sh /usr/bin/entrypoint + +RUN chmod +x /data/* /usr/bin/entrypoint + USER gitlab-runner -WORKDIR /data ENTRYPOINT ["dumb-init", "--"] CMD ["entrypoint"] diff --git a/entrypoint.sh b/entrypoint.sh index 9fba9a8..bff9d06 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash -trap cleanup SIGTERM +trap cleanup SIGTERM SIGINT cleanup() { gitlab-runner unregister --all-runners diff --git a/env.py b/env.py index 487f888..bc34c6b 100644 --- a/env.py +++ b/env.py @@ -9,7 +9,8 @@ KEY_PAIR_NAME = os.getenv("CUSTOM_ENV_KEY_PAIR_NAME") or os.getenv("KEY_PAIR_NAM SECURITY_GROUPS = os.getenv("CUSTOM_ENV_SECURITY_GROUPS") or os.getenv("SECURITY_GROUPS") USERNAME = os.getenv("CUSTOM_ENV_USERNAME") or os.getenv("USERNAME") PRIVATE_KEY_PATH = f"{os.getenv('HOME')}/priv_key" -SSH_TIMEOUT = os.getenv("CUSTOM_ENV_SSH_TIMEOUT") or os.getenv("SSH_TIMEOUT") or "30" - +SSH_TIMEOUT = os.getenv("CUSTOM_ENV_SSH_TIMEOUT") or os.getenv("SSH_TIMEOUT") or "20" +FLOATING_IP_NETWORK = os.getenv("FLOATING_IP_NETWORK") or "public" +SSH_IP_VERSION = os.getenv("SSH_IP_VERSION") or "4" BUILD_FAILURE_EXIT_CODE = os.getenv("BUILD_FAILURE_EXIT_CODE") SYSTEM_FAILURE_EXIT_CODE = os.getenv("SYSTEM_FAILURE_EXIT_CODE") diff --git a/prepare.py b/prepare.py index 23885c2..ec2e3bd 100644 --- a/prepare.py +++ b/prepare.py @@ -26,13 +26,22 @@ def provision_server( security_groups=[{"name": group} for group in env.SECURITY_GROUPS.split()], networks=[{"uuid": network.id}], ) - return conn.compute.wait_for_server(server, wait=600) + server = conn.compute.wait_for_server(server, wait=600) + + if env.SSH_IP_VERSION == "4": + ips = conn.available_floating_ip(network=env.FLOATING_IP_NETWORK, server=server) + conn.compute.add_floating_ip_to_server(server, ips.floating_ip_address, fixed_address=None) + + return server def get_server_ip( conn: openstack.connection.Connection, server: openstack.compute.v2.server.Server ) -> str: - return list(conn.compute.server_ips(server))[0].address + if env.SSH_IP_VERSION == "4": + return list(conn.compute.server_ips(server))[2].address + else: + return list(conn.compute.server_ips(server))[0].address def check_ssh(ip: str) -> None: diff --git a/run.py b/run.py index 7a4ba7b..b82221f 100644 --- a/run.py +++ b/run.py @@ -9,7 +9,10 @@ import env def get_server_ip(conn: openstack.connection.Connection) -> str: server = list(conn.compute.servers(name=env.VM_NAME, status="ACTIVE"))[0] - return list(conn.compute.server_ips(server))[0].address + if env.SSH_IP_VERSION == "4": + return list(conn.compute.server_ips(server))[2].address + else: + return list(conn.compute.server_ips(server))[0].address def execute_script_on_server(ssh: paramiko.client.SSHClient, script_path: str) -> int: -- GitLab