Skip to content

Commit

Permalink
Fix #181 move docker config to its own folder
Browse files Browse the repository at this point in the history
  • Loading branch information
khizunov committed Jan 22, 2025
1 parent 239346b commit e94f5e0
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ venv
MANIFEST
reports
**/RCS/**
.venv
3 changes: 3 additions & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ ignore-imports=no
# Maximum number of arguments for function / method
max-args=8

# Maximum number of positional arguments (see R0917).
max-positional-arguments = 12

# Argument names that match this expression will be ignored. Default to name
# with leading underscore
ignored-argument-names=_.*
Expand Down
20 changes: 15 additions & 5 deletions skipper/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import sys
from retry import retry
from skipper import utils
from skipper.utils import DOCKER_CONFIG


def get_default_net():
Expand All @@ -17,6 +18,7 @@ def get_default_net():


# pylint: disable=too-many-arguments
# pylint: disable=too-many-positional-arguments
def run(command, fqdn_image=None, environment=None, interactive=False, name=None, net=None, publish=(), volumes=None,
workdir=None, use_cache=False, workspace=None, env_file=(), stdout_to_stderr=False):

Expand Down Expand Up @@ -44,7 +46,9 @@ def _run(cmd_args, stdout_to_stderr=False):


# pylint: disable=too-many-locals
# pylint: disable=too-many-branches
# pylint: disable=too-many-arguments
# pylint: disable=too-many-positional-arguments
def _run_nested(fqdn_image, environment, command, interactive, name, net, publish, volumes, workdir, use_cache, workspace, env_file):
cwd = os.getcwd()
if workspace is None:
Expand Down Expand Up @@ -86,6 +90,12 @@ def _run_nested(fqdn_image, environment, command, interactive, name, net, publis
cmd += ['-e', f'CONTAINER_RUNTIME_COMMAND={utils.get_runtime_command()}']

if utils.get_runtime_command() == "docker":
if not utils.is_environment_variable_defined('DOCKER_CONFIG', environment):
cmd += ['-e', f'DOCKER_CONFIG={DOCKER_CONFIG}']

if not utils.is_environment_variable_defined('DOCKER_CONTEXT', environment):
cmd += ['-e', 'DOCKER_CONTEXT=default']

try:
docker_gid = grp.getgrnam('docker').gr_gid
cmd += ['-e', f'SKIPPER_DOCKER_GID={docker_gid}']
Expand Down Expand Up @@ -136,12 +146,12 @@ def handle_volumes_bind_mount(docker_cmd, homedir, volumes, workspace):
volumes.extend([f'{homedir}/.netrc:{homedir}/.netrc:ro',
f'{homedir}/.gitconfig:{homedir}/.gitconfig:ro'])

# required for docker buildkit and credentials
docker_folder = f'{homedir}/.docker'
if not any(f'{docker_folder}:{docker_folder}' in volume for volume in volumes):
_add_path_if_exists(docker_folder, docker_folder, 'rw', volumes)
# required for docker credentials
docker_config_folder = f'{homedir}/.docker/config.json'
if not any(f'{docker_config_folder}:' in volume for volume in volumes):
_add_path_if_exists(docker_config_folder, f'{DOCKER_CONFIG}/config.json', 'rw', volumes)

# required for docker login (certificates)
# required for docker certificates
_add_path_if_exists('/etc/docker', '/etc/docker', 'ro', volumes)

if utils.get_runtime_command() == utils.PODMAN:
Expand Down
5 changes: 5 additions & 0 deletions skipper/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
logger = None # pylint: disable=invalid-name

CONTAINER_RUNTIME_COMMAND = os.getenv("CONTAINER_RUNTIME_COMMAND")
DOCKER_CONFIG = "/opt/.docker"

SKIPPER_ULIMIT = [['--ulimit', limit] for limit in os.environ.get('SKIPPER_ULIMITS', 'nofile=65536:65536').split(',')]

Expand Down Expand Up @@ -211,3 +212,7 @@ def set_remote_registry_login_info(registry, ctx_object):
except Exception: # pylint: disable=broad-except
# Ignore failure and just continue
pass


def is_environment_variable_defined(name, environment):
return any(name in env_var for env_var in environment)

0 comments on commit e94f5e0

Please sign in to comment.