docker: Fix dockerfile creation

This commit is contained in:
Anders Ingemann 2016-06-05 17:19:27 +02:00
parent 0d54ad68ec
commit 49ddd3879f
4 changed files with 19 additions and 14 deletions

View file

@ -26,8 +26,8 @@ Name
Provider
~~~~~~~~
- ``dockerfile``: Inline dockerfile that should be appended to
the one created by the bootstrapper.
- ``dockerfile``: List of Dockerfile instructions that should be appended to
the ones created by the bootstrapper.
``optional``
- ``labels``: Labels that should be added to the dockerfile.
@ -49,8 +49,8 @@ Example:
name: bootstrap-vz:latest
provider:
name: docker
dockerfile: >
CMD /bin/bash
dockerfile:
- CMD /bin/bash
labels:
name: debian-{system.release}-{system.architecture}-{%y}{%m}{%d}
description: Debian {system.release} {system.architecture}

View file

@ -20,7 +20,11 @@ properties:
patternProperties:
^.+$: {type: string}
dockerfile:
type: array
items:
# https://github.com/turtlebender/docker/blob/6e2662b3bad319679e17fe25d410f246820ab0e9/builder/job.go#L27
type: string
pattern: '^(ENTRYPOINT|CMD|USER|WORKDIR|ENV|VOLUME|EXPOSE|ONBUILD|LABEL|MAINTAINER)'
system:
type: object
properties:

View file

@ -9,7 +9,7 @@ class CreateDockerfileEntry(Task):
@classmethod
def run(cls, info):
info._docker['dockerfile'] = ''
info._docker['dockerfile'] = []
class CreateImage(Task):
@ -21,8 +21,10 @@ class CreateImage(Task):
from pipes import quote
tar_cmd = ['tar', '--create', '--numeric-owner',
'--directory', info.volume.path, '.']
docker_cmd = ['docker', 'import', '--change', info._docker['dockerfile'], '-',
info.manifest.name.format(**info.manifest_vars)]
docker_cmd = ['docker', 'import']
for instruction in info._docker['dockerfile']:
docker_cmd.extend(['--change', instruction])
docker_cmd.extend(['-', info.manifest.name.format(**info.manifest_vars)])
cmd = ' '.join(map(quote, tar_cmd)) + ' | ' + ' '.join(map(quote, docker_cmd))
[info._docker['image_id']] = log_check_call([cmd], shell=True)
@ -55,9 +57,8 @@ class PopulateLabels(Task):
value = value.replace('\n', '\\\n')
value = '"' + value + '"'
return value
kv_pairs = [label + '=' + escape(value) for label, value in labels.items()]
# Add some nice newlines and indentation
info._docker['dockerfile'] += 'LABEL ' + ' \\\n '.join(kv_pairs) + '\n'
for label, value in labels.items():
info._docker['dockerfile'].append('LABEL {}={}'.format(label, escape(value)))
class AppendManifestDockerfile(Task):
@ -68,4 +69,4 @@ class AppendManifestDockerfile(Task):
@classmethod
def run(cls, info):
info._docker['dockerfile'] += info.manifest.provider['dockerfile'] + '\n'
info._docker['dockerfile'].extend(info.manifest.provider['dockerfile'])

View file

@ -4,8 +4,8 @@ provider:
name: docker
labels:
description: Debian {system.release} {system.architecture}
dockerfile: >
CMD /bin/bash
dockerfile:
- CMD /bin/bash
bootstrapper:
workspace: /target
variant: minbase