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

View file

@ -20,7 +20,11 @@ properties:
patternProperties: patternProperties:
^.+$: {type: string} ^.+$: {type: string}
dockerfile: dockerfile:
type: string 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: system:
type: object type: object
properties: properties:

View file

@ -9,7 +9,7 @@ class CreateDockerfileEntry(Task):
@classmethod @classmethod
def run(cls, info): def run(cls, info):
info._docker['dockerfile'] = '' info._docker['dockerfile'] = []
class CreateImage(Task): class CreateImage(Task):
@ -21,8 +21,10 @@ class CreateImage(Task):
from pipes import quote from pipes import quote
tar_cmd = ['tar', '--create', '--numeric-owner', tar_cmd = ['tar', '--create', '--numeric-owner',
'--directory', info.volume.path, '.'] '--directory', info.volume.path, '.']
docker_cmd = ['docker', 'import', '--change', info._docker['dockerfile'], '-', docker_cmd = ['docker', 'import']
info.manifest.name.format(**info.manifest_vars)] 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)) cmd = ' '.join(map(quote, tar_cmd)) + ' | ' + ' '.join(map(quote, docker_cmd))
[info._docker['image_id']] = log_check_call([cmd], shell=True) [info._docker['image_id']] = log_check_call([cmd], shell=True)
@ -55,9 +57,8 @@ class PopulateLabels(Task):
value = value.replace('\n', '\\\n') value = value.replace('\n', '\\\n')
value = '"' + value + '"' value = '"' + value + '"'
return value return value
kv_pairs = [label + '=' + escape(value) for label, value in labels.items()] for label, value in labels.items():
# Add some nice newlines and indentation info._docker['dockerfile'].append('LABEL {}={}'.format(label, escape(value)))
info._docker['dockerfile'] += 'LABEL ' + ' \\\n '.join(kv_pairs) + '\n'
class AppendManifestDockerfile(Task): class AppendManifestDockerfile(Task):
@ -68,4 +69,4 @@ class AppendManifestDockerfile(Task):
@classmethod @classmethod
def run(cls, info): 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 name: docker
labels: labels:
description: Debian {system.release} {system.architecture} description: Debian {system.release} {system.architecture}
dockerfile: > dockerfile:
CMD /bin/bash - CMD /bin/bash
bootstrapper: bootstrapper:
workspace: /target workspace: /target
variant: minbase variant: minbase