Add support for build arguments

Allows 'build' configuration option to be specified as an
object and adds support for build args.

Signed-off-by: Garrett Heel <garrettheel@gmail.com>
This commit is contained in:
Garrett Heel 2015-12-11 15:19:51 -08:00 committed by Joffrey F
commit 9cfa71ceee
9 changed files with 297 additions and 49 deletions

View file

@ -294,7 +294,7 @@ class ServiceTest(DockerClientTestCase):
project='composetest',
name='db',
client=self.client,
build='tests/fixtures/dockerfile-with-volume',
build={'context': 'tests/fixtures/dockerfile-with-volume'},
)
old_container = create_and_start_container(service)
@ -315,7 +315,7 @@ class ServiceTest(DockerClientTestCase):
def test_execute_convergence_plan_when_image_volume_masks_config(self):
service = self.create_service(
'db',
build='tests/fixtures/dockerfile-with-volume',
build={'context': 'tests/fixtures/dockerfile-with-volume'},
)
old_container = create_and_start_container(service)
@ -346,7 +346,7 @@ class ServiceTest(DockerClientTestCase):
def test_execute_convergence_plan_without_start(self):
service = self.create_service(
'db',
build='tests/fixtures/dockerfile-with-volume'
build={'context': 'tests/fixtures/dockerfile-with-volume'}
)
containers = service.execute_convergence_plan(ConvergencePlan('create', []), start=False)
@ -450,7 +450,7 @@ class ServiceTest(DockerClientTestCase):
service = Service(
name='test',
client=self.client,
build='tests/fixtures/simple-dockerfile',
build={'context': 'tests/fixtures/simple-dockerfile'},
project='composetest',
)
container = create_and_start_container(service)
@ -463,7 +463,7 @@ class ServiceTest(DockerClientTestCase):
service = Service(
name='test',
client=self.client,
build='this/does/not/exist/and/will/throw/error',
build={'context': 'this/does/not/exist/and/will/throw/error'},
project='composetest',
)
container = create_and_start_container(service)
@ -483,7 +483,7 @@ class ServiceTest(DockerClientTestCase):
with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f:
f.write("FROM busybox\n")
self.create_service('web', build=base_dir).build()
self.create_service('web', build={'context': base_dir}).build()
assert self.client.inspect_image('composetest_web')
def test_build_non_ascii_filename(self):
@ -496,7 +496,7 @@ class ServiceTest(DockerClientTestCase):
with open(os.path.join(base_dir.encode('utf8'), b'foo\xE2bar'), 'w') as f:
f.write("hello world\n")
self.create_service('web', build=text_type(base_dir)).build()
self.create_service('web', build={'context': text_type(base_dir)}).build()
assert self.client.inspect_image('composetest_web')
def test_build_with_image_name(self):
@ -508,16 +508,30 @@ class ServiceTest(DockerClientTestCase):
image_name = 'examples/composetest:latest'
self.addCleanup(self.client.remove_image, image_name)
self.create_service('web', build=base_dir, image=image_name).build()
self.create_service('web', build={'context': base_dir}, image=image_name).build()
assert self.client.inspect_image(image_name)
def test_build_with_git_url(self):
build_url = "https://github.com/dnephin/docker-build-from-url.git"
service = self.create_service('buildwithurl', build=build_url)
service = self.create_service('buildwithurl', build={'context': build_url})
self.addCleanup(self.client.remove_image, service.image_name)
service.build()
assert service.image()
def test_build_with_build_args(self):
base_dir = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, base_dir)
with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f:
f.write("FROM busybox\n")
f.write("ARG build_version\n")
service = self.create_service('buildwithargs',
build={'context': text_type(base_dir),
'args': {"build_version": "1"}})
service.build()
assert service.image()
def test_start_container_stays_unpriviliged(self):
service = self.create_service('web')
container = create_and_start_container(service).inspect()

View file

@ -266,13 +266,13 @@ class ServiceStateTest(DockerClientTestCase):
dockerfile = context.join('Dockerfile')
dockerfile.write(base_image)
web = self.create_service('web', build=str(context))
web = self.create_service('web', build={'context': str(context)})
container = web.create_container()
dockerfile.write(base_image + 'CMD echo hello world\n')
web.build()
web = self.create_service('web', build=str(context))
web = self.create_service('web', build={'context': str(context)})
self.assertEqual(('recreate', [container]), web.convergence_plan())
def test_image_changed_to_build(self):
@ -286,7 +286,7 @@ class ServiceStateTest(DockerClientTestCase):
web = self.create_service('web', image='busybox')
container = web.create_container()
web = self.create_service('web', build=str(context))
web = self.create_service('web', build={'context': str(context)})
plan = web.convergence_plan()
self.assertEqual(('recreate', [container]), plan)
containers = web.execute_convergence_plan(plan)