1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2024-11-22 12:53:00 +00:00

"copy-conf" -> "conf-copy", subcommand "conf-purge", constants centralization

This commit is contained in:
Jörn-Michael Miehe 2020-08-18 12:24:55 +02:00
parent 366ed9b4fe
commit 5b489d0392
6 changed files with 72 additions and 38 deletions

View file

@ -1,7 +1,33 @@
# system # system
import os import os
#############
# ENVIRONMENT
# location of "src" directory to use # location of "src" directory to use
KIWI_ROOT = os.getenv('KIWI_ROOT', ".") KIWI_ROOT = os.getenv('KIWI_ROOT', ".")
# default name of kiwi-config file # default name of kiwi-config file
KIWI_CONF_NAME = os.getenv('KIWI_CONF_NAME', "kiwi.yml") KIWI_CONF_NAME = os.getenv('KIWI_CONF_NAME', "kiwi.yml")
############
# FILE NAMES
# text files inside kiwi-config "src" directory
HEADER_KIWI_CONF_NAME = f"{KIWI_ROOT}/kiwi_header.yml"
DEFAULT_KIWI_CONF_NAME = f"{KIWI_ROOT}/kiwi_default.yml"
VERSION_TAG_NAME = f"{KIWI_ROOT}/version-tag"
# special config directory in projects
CONF_DIRECTORY_NAME = 'conf'
# location for auxiliary Dockerfiles
IMAGES_DIRECTORY_NAME = f"{KIWI_ROOT}/images"
####################
# DOCKER IMAGE NAMES
# name for auxiliary docker images
LOCAL_IMAGES_NAME = 'localhost/kiwi-config/auxiliary'
DEFAULT_IMAGE_NAME = 'alpine:latest'

View file

@ -6,15 +6,7 @@ import re
import yaml import yaml
# local # local
from ._constants import KIWI_ROOT, KIWI_CONF_NAME from ._constants import KIWI_CONF_NAME, HEADER_KIWI_CONF_NAME, DEFAULT_KIWI_CONF_NAME, VERSION_TAG_NAME
###########
# CONSTANTS
# text files inside kiwi-config "src" directory
HEADER_KIWI_CONF_NAME = f"{KIWI_ROOT}/kiwi_header.yml"
DEFAULT_KIWI_CONF_NAME = f"{KIWI_ROOT}/kiwi_default.yml"
VERSION_TAG_NAME = f"{KIWI_ROOT}/version-tag"
class Config: class Config:

View file

@ -1,6 +1,6 @@
# local # local
from .cmd import CmdCommand from .cmd import CmdCommand
from .copy_conf import CopyConfCommand from .conf import ConfCopyCommand, ConfPurgeCommand
from .down import DownCommand from .down import DownCommand
from .init import InitCommand from .init import InitCommand
from .logs import LogsCommand from .logs import LogsCommand
@ -11,7 +11,8 @@ from .up import UpCommand
__all__ = [ __all__ = [
'CmdCommand', 'CmdCommand',
'CopyConfCommand', 'ConfCopyCommand',
'ConfPurgeCommand',
'DownCommand', 'DownCommand',
'InitCommand', 'InitCommand',
'LogsCommand', 'LogsCommand',

View file

@ -4,26 +4,20 @@ import os
import subprocess import subprocess
# parent # parent
from .._constants import KIWI_ROOT from .._constants import CONF_DIRECTORY_NAME
# local # local
from ._subcommand import SubCommand from ._subcommand import SubCommand
from .utils.dockercommand import DockerCommand
from .utils.project import list_projects, get_project_dir from .utils.project import list_projects, get_project_dir
from .utils.rootkit import Rootkit, prefix_path from .utils.rootkit import Rootkit, _prefix_path_mnt
def _add_prefix(prefix, path): class ConfCopyCommand(SubCommand):
abs_path = os.path.abspath(path) """kiwi conf-copy"""
return os.path.realpath(prefix + '/' + abs_path)
class CopyConfCommand(SubCommand):
"""kiwi copy-conf"""
def __init__(self): def __init__(self):
super().__init__( super().__init__(
'copy-conf', 'conf-copy',
description="Synchronize all config files to target directory" description="Synchronize all config files to target directory"
) )
@ -31,7 +25,7 @@ class CopyConfCommand(SubCommand):
conf_dirs = [] conf_dirs = []
for project_name in list_projects(config): for project_name in list_projects(config):
project_conf = f"{get_project_dir(config, project_name)}/conf" project_conf = f"{get_project_dir(config, project_name)}/{CONF_DIRECTORY_NAME}"
if os.path.isdir(project_conf): if os.path.isdir(project_conf):
conf_dirs.append(project_conf) conf_dirs.append(project_conf)
@ -42,8 +36,29 @@ class CopyConfCommand(SubCommand):
logging.info(f"Sync directories: {conf_dirs}") logging.info(f"Sync directories: {conf_dirs}")
Rootkit('rsync').run( Rootkit('rsync').run(
config, args, ['rsync', '-r', *prefix_path(conf_dirs)], config, args, ['rsync', '-r', *_prefix_path_mnt(conf_dirs)],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
) )
return True return True
class ConfPurgeCommand(SubCommand):
"""kiwi conf-purge"""
def __init__(self):
super().__init__(
'conf-purge',
description="Remove all config files in target directory"
)
def run(self, runner, config, args):
conf_target = f"{config['runtime:storage']}/{CONF_DIRECTORY_NAME}"
logging.info(f"Purging directories: {conf_target}")
Rootkit().run(
config, args, ['rm', '-rf', _prefix_path_mnt(conf_target)],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
)
return True

View file

@ -1,9 +1,9 @@
# system # system
import logging import logging
import os
import subprocess import subprocess
# local # local
from ..._constants import CONF_DIRECTORY_NAME
from .executable import Executable from .executable import Executable
from .project import * from .project import *
@ -23,7 +23,7 @@ def _update_kwargs(config, args, **kwargs):
kwargs['env'].update({ kwargs['env'].update({
'COMPOSE_PROJECT_NAME': project_name, 'COMPOSE_PROJECT_NAME': project_name,
'KIWI_HUB_NAME': config['network:name'], 'KIWI_HUB_NAME': config['network:name'],
'CONFDIR': os.path.join(config['runtime:storage'], 'conf'), 'CONFDIR': os.path.join(config['runtime:storage'], CONF_DIRECTORY_NAME),
'TARGETDIR': os.path.join(config['runtime:storage'], get_project_dir(config, project_name)) 'TARGETDIR': os.path.join(config['runtime:storage'], get_project_dir(config, project_name))
}) })

View file

@ -4,29 +4,29 @@ import os
import subprocess import subprocess
# parent # parent
from ..._constants import KIWI_ROOT from ..._constants import IMAGES_DIRECTORY_NAME, LOCAL_IMAGES_NAME, DEFAULT_IMAGE_NAME
# local # local
from .dockercommand import DockerCommand from .dockercommand import DockerCommand
def _prefix_path(prefix, path): def _prefix_path(prefix, path):
abs_path = os.path.abspath(path)
return os.path.realpath(prefix + '/' + abs_path)
def prefix_path(path):
if isinstance(path, str): if isinstance(path, str):
return _prefix_path('/mnt/', path) abs_path = os.path.abspath(path)
return os.path.realpath(f"{prefix}/{abs_path}")
elif isinstance(path, list): elif isinstance(path, list):
return [_prefix_path('/mnt/', p) for p in path] return [_prefix_path(prefix, p) for p in path]
def _prefix_path_mnt(path):
return _prefix_path('/mnt/', path)
def _image_name(image_tag): def _image_name(image_tag):
if image_tag is not None: if image_tag is not None:
return f"kiwi-config/auxiliary:{image_tag}" return f"{LOCAL_IMAGES_NAME}:{image_tag}"
else: else:
return "alpine:latest" return DEFAULT_IMAGE_NAME
class Rootkit: class Rootkit:
@ -66,8 +66,8 @@ class Rootkit:
[ [
'build', 'build',
'-t', _image_name(self.__image_tag), '-t', _image_name(self.__image_tag),
'-f', f"{KIWI_ROOT}/images/{self.__image_tag}.Dockerfile", '-f', f"{IMAGES_DIRECTORY_NAME}/{self.__image_tag}.Dockerfile",
f"{KIWI_ROOT}/images" f"{IMAGES_DIRECTORY_NAME}"
], ],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
) )