in container_agent/run_containers.py [0:0]
def LoadUserContainers(containers, all_volumes):
"""Process a "containers" block of config and return a list of
containers."""
# TODO(thockin): could be a dict of name -> Container
all_ctrs = []
all_ctr_names = []
for ctr_index, ctr_spec in enumerate(containers):
# Verify the container name.
if 'name' not in ctr_spec:
raise ConfigException('containers[%d] has no name' % (ctr_index))
if not IsRfc1035Name(ctr_spec['name']):
raise ConfigException('containers[%d].name is invalid: %s'
% (ctr_index, ctr_spec['name']))
if ctr_spec['name'] in all_ctr_names:
raise ConfigException('containers[%d].name is not unique: %s'
% (ctr_index, ctr_spec['name']))
all_ctr_names.append(ctr_spec['name'])
# Verify the container image.
if 'image' not in ctr_spec:
raise ConfigException('containers[%s] has no image'
% (ctr_spec['name']))
# The current accumulation of parameters.
current_ctr = Container(ctr_spec['name'], ctr_spec['image'])
# Always set the hostname for user containers.
current_ctr.hostname = current_ctr.name
# Get the commandline.
current_ctr.command = ctr_spec.get('command', [])
# Get the initial working directory.
current_ctr.working_dir = ctr_spec.get('workingDir', None)
if current_ctr.working_dir is not None:
if not IsValidPath(current_ctr.working_dir):
raise ConfigException(
'containers[%s].workingDir is invalid: %s'
% (current_ctr.name, current_ctr.working_dir))
# Get the list of port mappings.
current_ctr.ports = LoadPorts(
ctr_spec.get('ports', []), current_ctr.name)
# Get the list of volumes to mount.
current_ctr.mounts = LoadVolumeMounts(
ctr_spec.get('volumeMounts', []), all_volumes, current_ctr.name)
# Get the list of environment variables.
current_ctr.env_vars = LoadEnvVars(
ctr_spec.get('env', []), current_ctr.name)
all_ctrs.append(current_ctr)
return all_ctrs