mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +00:00
docker_daemon: add pull_images option
This commit is contained in:
parent
880e13f0d8
commit
f3a9a1b1ec
3 changed files with 58 additions and 0 deletions
|
@ -22,3 +22,4 @@ def resolve_tasks(taskset, manifest):
|
||||||
taskset.add(tasks.AddDockerBinary)
|
taskset.add(tasks.AddDockerBinary)
|
||||||
taskset.add(tasks.AddDockerInit)
|
taskset.add(tasks.AddDockerInit)
|
||||||
taskset.add(tasks.EnableMemoryCgroup)
|
taskset.add(tasks.EnableMemoryCgroup)
|
||||||
|
taskset.add(tasks.PullDockerImages)
|
||||||
|
|
43
bootstrapvz/plugins/docker_daemon/pull.py
Normal file
43
bootstrapvz/plugins/docker_daemon/pull.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def pull(info, images, retries=10):
|
||||||
|
if len(images) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
bin_docker = os.path.join(info.root, 'usr/bin/docker')
|
||||||
|
graph_dir = os.path.join(info.root, 'var/lib/docker')
|
||||||
|
socket = 'unix://' + os.path.join(info.workspace, 'docker.sock')
|
||||||
|
pidfile = os.path.join(info.workspace, 'docker.pid')
|
||||||
|
try:
|
||||||
|
daemon = subprocess.Popen([bin_docker, '-d', '--graph', graph_dir, '-H', socket, '-p', pidfile])
|
||||||
|
for _ in range(retries):
|
||||||
|
if subprocess.call([bin_docker, '-H', socket, 'version']) == 0:
|
||||||
|
break
|
||||||
|
time.sleep(1)
|
||||||
|
for img in images:
|
||||||
|
if img.endswith('.tar.gz') or img.endswith('.tgz'):
|
||||||
|
cmd = [bin_docker, '-H', socket, 'load', '-i', img]
|
||||||
|
logging.debug(' '.join(cmd))
|
||||||
|
if subprocess.call(cmd) != 0:
|
||||||
|
msg = 'error loading docker image {img}.'.format(img=img)
|
||||||
|
raise Exception(msg)
|
||||||
|
continue
|
||||||
|
cmd = [bin_docker, '-H', socket, 'pull', img]
|
||||||
|
logging.debug('running: %s', ' '.join(cmd))
|
||||||
|
if subprocess.call(cmd) != 0:
|
||||||
|
msg = 'error pulling docker image {img}.'.format(img=img)
|
||||||
|
raise Exception(msg)
|
||||||
|
finally:
|
||||||
|
daemon.terminate()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
class Info(object):
|
||||||
|
root = '/tmp/bootstrap-vz/root'
|
||||||
|
workspace = '/tmp/bootstrap-vz/workspace'
|
||||||
|
|
||||||
|
pull_images = ['/usr/local/google/home/proppy/bootstrap-vz/busybox.tar.gz', 'golang:1.3']
|
||||||
|
pull(Info(), pull_images)
|
|
@ -3,6 +3,7 @@ from bootstrapvz.common import phases
|
||||||
from bootstrapvz.common.tasks import boot
|
from bootstrapvz.common.tasks import boot
|
||||||
from bootstrapvz.common.tasks import initd
|
from bootstrapvz.common.tasks import initd
|
||||||
from bootstrapvz.providers.gce.tasks import boot as gceboot
|
from bootstrapvz.providers.gce.tasks import boot as gceboot
|
||||||
|
from bootstrapvz.plugins.docker_daemon.pull import pull
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -65,3 +66,16 @@ class EnableMemoryCgroup(Task):
|
||||||
from bootstrapvz.common.tools import sed_i
|
from bootstrapvz.common.tools import sed_i
|
||||||
grub_config = os.path.join(info.root, 'etc/default/grub')
|
grub_config = os.path.join(info.root, 'etc/default/grub')
|
||||||
sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1 cgroup_enable=memory"')
|
sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1 cgroup_enable=memory"')
|
||||||
|
|
||||||
|
class PullDockerImages(Task):
|
||||||
|
description = 'Pull docker images'
|
||||||
|
phase = phases.system_modification
|
||||||
|
predecessors = [AddDockerBinary]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def run(cls, info):
|
||||||
|
pull_images = info.manifest.plugins['docker_daemon'].get('pull_images', [])
|
||||||
|
if len(pull_images) == 0:
|
||||||
|
return
|
||||||
|
pull_images_retries = info.manifest.plugins['docker_daemon'].get('pull_images_retries', 10)
|
||||||
|
pull(info, pull_images, pull_images_retries)
|
||||||
|
|
Loading…
Add table
Reference in a new issue