Allow spoc-container start to pass a command
This commit is contained in:
parent
5929a1ea6b
commit
b3f2a4be70
@ -87,9 +87,9 @@ def destroy(container_name):
|
|||||||
# Remove container and its directory
|
# Remove container and its directory
|
||||||
Container(container_name, False).destroy()
|
Container(container_name, False).destroy()
|
||||||
|
|
||||||
def start(container_name):
|
def start(container_name, command):
|
||||||
# Start the container using init values from its definition
|
# Start the container using init values from its definition
|
||||||
Container(container_name).start()
|
Container(container_name).start(command)
|
||||||
|
|
||||||
def stop(container_name):
|
def stop(container_name):
|
||||||
# Stop the container using halt signal from its definition
|
# Stop the container using halt signal from its definition
|
||||||
@ -147,6 +147,7 @@ parser_destroy.add_argument('container')
|
|||||||
parser_start = subparsers.add_parser('start')
|
parser_start = subparsers.add_parser('start')
|
||||||
parser_start.set_defaults(action=start)
|
parser_start.set_defaults(action=start)
|
||||||
parser_start.add_argument('container')
|
parser_start.add_argument('container')
|
||||||
|
parser_start.add_argument('command', nargs=argparse.REMAINDER)
|
||||||
|
|
||||||
parser_stop = subparsers.add_parser('stop')
|
parser_stop = subparsers.add_parser('stop')
|
||||||
parser_stop.set_defaults(action=stop)
|
parser_stop.set_defaults(action=stop)
|
||||||
@ -174,7 +175,7 @@ elif args.action is modify:
|
|||||||
elif args.action is destroy:
|
elif args.action is destroy:
|
||||||
destroy(args.container)
|
destroy(args.container)
|
||||||
elif args.action is start:
|
elif args.action is start:
|
||||||
start(args.container)
|
start(args.container, args.command)
|
||||||
elif args.action is stop:
|
elif args.action is stop:
|
||||||
stop(args.container)
|
stop(args.container)
|
||||||
elif args.action is status:
|
elif args.action is status:
|
||||||
|
@ -151,17 +151,18 @@ class Container:
|
|||||||
# Release the IP address from global hosts configuration
|
# Release the IP address from global hosts configuration
|
||||||
net.release_ip(self.name)
|
net.release_ip(self.name)
|
||||||
|
|
||||||
def start(self):
|
def start(self, command=None):
|
||||||
# Start the container including its dependencies
|
# Start the container including its dependencies
|
||||||
depsolver = DepSolver()
|
depsolver = DepSolver()
|
||||||
self.get_start_dependencies(depsolver)
|
self.get_start_dependencies(depsolver)
|
||||||
for dependency in depsolver.solve():
|
for dependency in depsolver.solve():
|
||||||
if dependency.get_state() != ContainerState.RUNNING:
|
if dependency.get_state() != ContainerState.RUNNING:
|
||||||
dependency.do_start()
|
dependency.do_start(command if dependency.name == self.name else None)
|
||||||
|
|
||||||
def do_start(self):
|
def do_start(self, command=None):
|
||||||
|
cmd = ['--']+command if command else []
|
||||||
# Start the current container, wait until it is reported as started and execute application readiness check
|
# Start the current container, wait until it is reported as started and execute application readiness check
|
||||||
subprocess.Popen(['lxc-start', '-P', config.CONTAINERS_DIR, self.name])
|
subprocess.Popen(['lxc-start', '-P', config.CONTAINERS_DIR, self.name]+cmd)
|
||||||
self.await_state(ContainerState.RUNNING)
|
self.await_state(ContainerState.RUNNING)
|
||||||
# Launch the readiness check in a separate thread, so it can be reliably cancelled after timeout
|
# Launch the readiness check in a separate thread, so it can be reliably cancelled after timeout
|
||||||
with ThreadPoolExecutor(max_workers=1) as pool:
|
with ThreadPoolExecutor(max_workers=1) as pool:
|
||||||
|
Loading…
Reference in New Issue
Block a user