From 7093d37f1825182366939cf64faa477040d29aa2 Mon Sep 17 00:00:00 2001 From: Jeffrey Zhang Date: Fri, 8 Jan 2016 10:13:39 +0800 Subject: [PATCH] Expose the docker build_arg to build.py With this implement, we can add variables at building stage. For example, add HTTP_PROXY and NO_PROXY when needed like below. build.py --build-args \ HTTP_PROXY:http://127.0.0.1:8080,NO_PROXY:127.0.0.1 More info about build_arg, pls check[0] [0] https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg DocImpact Implements: bp add-buildargs Change-Id: I29ed7f536670fef59d697603dc562a69d90743c9 --- kolla/cmd/build.py | 3 ++- kolla/common/config.py | 2 ++ kolla/tests/test_build.py | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py index e7c54a4355..aff472d83c 100755 --- a/kolla/cmd/build.py +++ b/kolla/cmd/build.py @@ -261,7 +261,8 @@ class WorkerThread(Thread): nocache=self.nocache, rm=True, pull=pull, - forcerm=self.forcerm): + forcerm=self.forcerm, + buildargs=self.conf.build_args): stream = json.loads(response.decode('utf-8')) if 'stream' in stream: diff --git a/kolla/common/config.py b/kolla/common/config.py index bc821e0258..fe6a33d5e0 100644 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -63,6 +63,8 @@ _CLI_OPTS = [ cfg.BoolOpt('debug', short='d', default=False, deprecated_group='kolla-build', help='Turn on debugging log level'), + cfg.DictOpt('build-args', + help='Set docker build time variables'), cfg.StrOpt('include-header', short='i', deprecated_group='kolla-build', help=('Path to custom file to be added at ' diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index 380e46021a..afc2e75465 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -45,4 +45,22 @@ class WorkerThreadTest(base.TestCase): mock_client().build.assert_called_once_with( path=FAKE_IMAGE['path'], tag=FAKE_IMAGE['fullname'], - nocache=False, rm=True, pull=True, forcerm=True) + nocache=False, rm=True, pull=True, forcerm=True, + buildargs=None) + + @mock.patch('docker.Client') + def test_build_image_with_build_arg(self, mock_client): + build_args = { + 'HTTP_PROXY': 'http://localhost:8080', + 'NO_PROXY': '127.0.0.1' + } + self.conf.set_override('build_args', build_args) + worker = build.WorkerThread(mock.Mock(), + mock.Mock(), + self.conf) + worker.builder(FAKE_IMAGE) + + mock_client().build.assert_called_once_with( + path=FAKE_IMAGE['path'], tag=FAKE_IMAGE['fullname'], + nocache=False, rm=True, pull=True, forcerm=True, + buildargs=build_args)