mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-10-07 17:40:30 +00:00
The image name is now the repo + tag. Also:Improve labeling
This commit is contained in:
parent
5dada603eb
commit
d0bb9f75d3
5 changed files with 49 additions and 44 deletions
|
@ -14,15 +14,17 @@ With optimal settings a 64-bit jessie image can be whittled down to 81.95 MB
|
|||
Manifest settings
|
||||
-----------------
|
||||
|
||||
Name
|
||||
~~~~
|
||||
|
||||
- ``name``: The image name is the repository and tag to where an
|
||||
image should be imported.
|
||||
``required``
|
||||
|
||||
|
||||
Provider
|
||||
~~~~~~~~
|
||||
|
||||
- ``repository``: Repository to which the image should be imported.
|
||||
``required``
|
||||
|
||||
- ``tag``: Name with which the image should be tagged.
|
||||
``required``
|
||||
|
||||
- ``dockerfile``: Inline dockerfile that should be appended to
|
||||
the one created by the bootstrapper.
|
||||
``optional``
|
||||
|
@ -43,11 +45,11 @@ Example:
|
|||
.. code:: yaml
|
||||
|
||||
---
|
||||
name: bootstrap-vz:latest
|
||||
provider:
|
||||
name: docker
|
||||
repository: bootstrap-vz
|
||||
tag: latest
|
||||
dockerfile: >
|
||||
CMD /bin/bash
|
||||
labels:
|
||||
name: debian-{system.release}-{system.architecture}-{%y}{%m}{%d}
|
||||
description: Debian {system.release} {system.architecture}
|
||||
|
|
|
@ -25,10 +25,13 @@ def resolve_tasks(taskset, manifest):
|
|||
taskset.update(task_groups.cleanup_group)
|
||||
|
||||
taskset.update([tasks.commands.AddRequiredCommands,
|
||||
tasks.image.PopulateDockerfileLabels,
|
||||
tasks.image.CreateDockerfile,
|
||||
tasks.image.CreateDockerfileEntry,
|
||||
tasks.image.CreateImage,
|
||||
])
|
||||
if 'labels' in manifest.provider:
|
||||
taskset.add(tasks.image.PopulateLabels)
|
||||
if 'dockerfile' in manifest.provider:
|
||||
taskset.add(tasks.image.AppendManifestDockerfile)
|
||||
|
||||
|
||||
def resolve_rollback_tasks(taskset, manifest, completed, counter_task):
|
||||
|
|
|
@ -6,10 +6,6 @@ properties:
|
|||
provider:
|
||||
type: object
|
||||
properties:
|
||||
repository:
|
||||
type: string
|
||||
tag:
|
||||
type: string
|
||||
labels:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -25,7 +21,6 @@ properties:
|
|||
^.+$: {type: string}
|
||||
dockerfile:
|
||||
type: string
|
||||
required: [repository, tag]
|
||||
system:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
@ -3,10 +3,35 @@ from bootstrapvz.common import phases
|
|||
from bootstrapvz.common.tools import log_check_call
|
||||
|
||||
|
||||
class PopulateDockerfileLabels(Task):
|
||||
description = 'Populating dockerfile labels'
|
||||
class CreateDockerfileEntry(Task):
|
||||
description = 'Creating the Dockerfile entry'
|
||||
phase = phases.preparation
|
||||
|
||||
@classmethod
|
||||
def run(cls, info):
|
||||
info._docker['dockerfile'] = ''
|
||||
|
||||
|
||||
class CreateImage(Task):
|
||||
description = 'Creating docker image'
|
||||
phase = phases.image_registration
|
||||
|
||||
@classmethod
|
||||
def run(cls, info):
|
||||
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]
|
||||
cmd = ' '.join(map(quote, tar_cmd)) + ' | ' + ' '.join(map(quote, docker_cmd))
|
||||
[info._docker['container_id']] = log_check_call([cmd], shell=True)
|
||||
|
||||
|
||||
class PopulateLabels(Task):
|
||||
description = 'Populating docker labels'
|
||||
phase = phases.image_registration
|
||||
successors = [CreateImage]
|
||||
|
||||
@classmethod
|
||||
def run(cls, info):
|
||||
import pyrfc3339
|
||||
|
@ -22,16 +47,7 @@ class PopulateDockerfileLabels(Task):
|
|||
if 'labels' in info.manifest.provider:
|
||||
for label, value in info.manifest.provider['labels'].items():
|
||||
labels[label] = value.format(**info.manifest_vars)
|
||||
info._docker['dockerfile_labels'] = labels
|
||||
|
||||
|
||||
class CreateDockerfile(Task):
|
||||
description = 'Creating dockerfile'
|
||||
phase = phases.image_registration
|
||||
predecessors = [PopulateDockerfileLabels]
|
||||
|
||||
@classmethod
|
||||
def run(cls, info):
|
||||
# pipes.quote converts newlines into \n rather than just prefixing
|
||||
# it with a backslash, so we need to escape manually
|
||||
def escape(value):
|
||||
|
@ -39,26 +55,17 @@ class CreateDockerfile(Task):
|
|||
value = value.replace('\n', '\\\n')
|
||||
value = '"' + value + '"'
|
||||
return value
|
||||
labels = []
|
||||
for label, value in info._docker['dockerfile_labels'].items():
|
||||
labels.append(label + '=' + escape(value))
|
||||
kv_pairs = [label + '=' + escape(value) for label, value in labels.items()]
|
||||
# Add some nice newlines and indentation
|
||||
info._docker['dockerfile'] = 'LABEL ' + ' \\\n '.join(labels) + '\n'
|
||||
if 'dockerfile' in info.manifest.provider:
|
||||
info._docker['dockerfile'] += info.manifest.provider['dockerfile'] + '\n'
|
||||
info._docker['dockerfile'] += 'LABEL ' + ' \\\n '.join(kv_pairs) + '\n'
|
||||
|
||||
|
||||
class CreateImage(Task):
|
||||
description = 'Creating docker image'
|
||||
class AppendManifestDockerfile(Task):
|
||||
description = 'Appending Dockerfile instructions from the manifest'
|
||||
phase = phases.image_registration
|
||||
predecessors = [CreateDockerfile]
|
||||
predecessors = [PopulateLabels]
|
||||
successors = [CreateImage]
|
||||
|
||||
@classmethod
|
||||
def run(cls, info):
|
||||
from pipes import quote
|
||||
tar_cmd = ['tar', '--create', '--numeric-owner',
|
||||
'--directory', info.volume.path, '.']
|
||||
docker_cmd = ['docker', 'import', '--change', info._docker['dockerfile'], '-',
|
||||
info.manifest.provider['repository'] + ':' + info.manifest.provider['tag']]
|
||||
cmd = ' '.join(map(quote, tar_cmd)) + ' | ' + ' '.join(map(quote, docker_cmd))
|
||||
[info._docker['container_id']] = log_check_call(cmd, shell=True)
|
||||
info._docker['dockerfile'] += info.manifest.provider['dockerfile'] + '\n'
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
name: debian-{system.release}-{system.architecture}-{%y}{%m}{%d}
|
||||
provider:
|
||||
name: docker
|
||||
repository: bootstrap-vz
|
||||
tag: latest
|
||||
labels:
|
||||
description: Debian {system.release} {system.architecture}
|
||||
dockerfile: >
|
||||
|
|
Loading…
Add table
Reference in a new issue