mirror of
https://github.com/yavook/kiwi-scp.git
synced 2024-11-25 14:03:00 +00:00
"executables:*" key handling in _util
This commit is contained in:
parent
41274c3239
commit
e43dadd4fe
2 changed files with 39 additions and 31 deletions
|
@ -1,7 +1,31 @@
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from ..config import LoadedConfig
|
from ..config import LoadedConfig
|
||||||
|
|
||||||
|
###########
|
||||||
|
# CONSTANTS
|
||||||
|
|
||||||
|
|
||||||
|
def is_executable(filename):
|
||||||
|
if filename is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return os.path.isfile(filename) and os.access(filename, os.X_OK)
|
||||||
|
|
||||||
|
|
||||||
|
def find_exe_file(exe_name):
|
||||||
|
for path in os.environ['PATH'].split(os.pathsep):
|
||||||
|
exe_file = os.path.join(path, exe_name)
|
||||||
|
if is_executable(exe_file):
|
||||||
|
return exe_file
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_exe_key(exe_name):
|
||||||
|
return f'executables:{exe_name}'
|
||||||
|
|
||||||
|
|
||||||
class SubCommand:
|
class SubCommand:
|
||||||
command = None
|
command = None
|
||||||
|
@ -24,7 +48,7 @@ class Docker:
|
||||||
try:
|
try:
|
||||||
config = LoadedConfig.get()
|
config = LoadedConfig.get()
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
[config['executables:docker'], 'ps'],
|
[config[get_exe_key('docker')], 'ps'],
|
||||||
check=True,
|
check=True,
|
||||||
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
|
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
|
||||||
)
|
)
|
||||||
|
@ -35,12 +59,12 @@ class Docker:
|
||||||
return cls.__requires_root
|
return cls.__requires_root
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run_command(cls, program, args, cwd=None, env=None):
|
def run_command(cls, exe_key, args, cwd=None, env=None):
|
||||||
config = LoadedConfig.get()
|
config = LoadedConfig.get()
|
||||||
cmd = [config['executables:' + program], *args]
|
cmd = [config[get_exe_key(exe_key)], *args]
|
||||||
|
|
||||||
if cls.__check_requires_root():
|
if cls.__check_requires_root():
|
||||||
cmd = [config['executables:sudo'], *cmd]
|
cmd = [config[get_exe_key('sudo')], *cmd]
|
||||||
|
|
||||||
print(cmd)
|
print(cmd)
|
||||||
return subprocess.run(
|
return subprocess.run(
|
||||||
|
|
|
@ -4,7 +4,7 @@ import os
|
||||||
from ..core import KIWI_CONF_NAME, Parser
|
from ..core import KIWI_CONF_NAME, Parser
|
||||||
from ..config import DefaultConfig, LoadedConfig
|
from ..config import DefaultConfig, LoadedConfig
|
||||||
|
|
||||||
from ._utils import SubCommand
|
from ._utils import SubCommand, is_executable, find_exe_file, get_exe_key
|
||||||
|
|
||||||
|
|
||||||
def user_input(config, key, prompt):
|
def user_input(config, key, prompt):
|
||||||
|
@ -16,35 +16,19 @@ def user_input(config, key, prompt):
|
||||||
config[key] = result
|
config[key] = result
|
||||||
|
|
||||||
|
|
||||||
def is_executable(filename):
|
def user_input_exe(config, exe_name):
|
||||||
if filename is None:
|
key = get_exe_key(exe_name)
|
||||||
return False
|
|
||||||
|
|
||||||
return os.path.isfile(filename) and os.access(filename, os.X_OK)
|
|
||||||
|
|
||||||
|
|
||||||
def find_exe(program_name):
|
|
||||||
for path in os.environ["PATH"].split(os.pathsep):
|
|
||||||
exe_file = os.path.join(path, program_name)
|
|
||||||
if is_executable(exe_file):
|
|
||||||
return exe_file
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def user_input_exe(config, key):
|
|
||||||
exe_file = config[key]
|
exe_file = config[key]
|
||||||
program_name = key.split(':')[1]
|
|
||||||
|
|
||||||
if not is_executable(exe_file):
|
if not is_executable(exe_file):
|
||||||
logging.info("Reconfiguring '%s' executable path.", program_name)
|
logging.info(f"Reconfiguring '{exe_name}' executable path.")
|
||||||
exe_file = find_exe(program_name)
|
exe_file = find_exe_file(exe_name)
|
||||||
|
|
||||||
if exe_file is not None:
|
if exe_file is not None:
|
||||||
logging.debug("Found executable at '%s'.", exe_file)
|
logging.debug(f"Found executable at '{exe_file}'.")
|
||||||
config[key] = exe_file
|
config[key] = exe_file
|
||||||
else:
|
else:
|
||||||
user_input(config, key, f"Enter path to '{program_name}' executable")
|
user_input(config, key, f"Enter path to '{exe_name}' executable")
|
||||||
|
|
||||||
|
|
||||||
class InitCommand(SubCommand):
|
class InitCommand(SubCommand):
|
||||||
|
@ -68,7 +52,7 @@ class InitCommand(SubCommand):
|
||||||
logging.info(f"Initializing kiwi-config instance in '{os.getcwd()}'")
|
logging.info(f"Initializing kiwi-config instance in '{os.getcwd()}'")
|
||||||
|
|
||||||
if Parser.get_args().force and os.path.isfile(KIWI_CONF_NAME):
|
if Parser.get_args().force and os.path.isfile(KIWI_CONF_NAME):
|
||||||
logging.warning("Overwriting existing '%s'!", KIWI_CONF_NAME)
|
logging.warning(f"Overwriting existing '{KIWI_CONF_NAME}'!")
|
||||||
config = DefaultConfig.get()
|
config = DefaultConfig.get()
|
||||||
else:
|
else:
|
||||||
config = LoadedConfig.get()
|
config = LoadedConfig.get()
|
||||||
|
@ -88,8 +72,8 @@ class InitCommand(SubCommand):
|
||||||
user_input(config, 'network:cidr', "Enter CIDR block for local docker network")
|
user_input(config, 'network:cidr', "Enter CIDR block for local docker network")
|
||||||
|
|
||||||
# executables
|
# executables
|
||||||
user_input_exe(config, 'executables:docker')
|
user_input_exe(config, 'docker')
|
||||||
user_input_exe(config, 'executables:docker-compose')
|
user_input_exe(config, 'docker-compose')
|
||||||
user_input_exe(config, 'executables:sudo')
|
user_input_exe(config, 'sudo')
|
||||||
|
|
||||||
config.save()
|
config.save()
|
||||||
|
|
Loading…
Reference in a new issue