Fix #3281: Unexpected result when using build args with default values

Fix the issue when build arg is set to None instead of empty string.
Usecase:

cat docker-compose.yml
....
args:
- http_proxy
- https_proxy
- no_proxy

If http_proxy, https_proxy, no_proxy environment variables are not defined
then http_proxy, https_proxy, no_proxy build args will be set to string None which breaks all downloads

With this change build args will not passed to docker engine if they are equal to string None

Signed-off-by: Andrey Devyatkin <andrey.a.devyatkin@gmail.com>
This commit is contained in:
Andrey Devyatkin 2016-05-27 07:48:13 +02:00
commit e3e8a619cc
2 changed files with 35 additions and 3 deletions

View file

@ -445,7 +445,7 @@ class ServiceTest(unittest.TestCase):
forcerm=False,
nocache=False,
rm=True,
buildargs=None,
buildargs={},
)
def test_ensure_image_exists_no_build(self):
@ -481,7 +481,33 @@ class ServiceTest(unittest.TestCase):
forcerm=False,
nocache=False,
rm=True,
buildargs=None,
buildargs={},
)
def test_ensure_filter_out_empty_build_args(self):
args = {u'no_proxy': 'None', u'https_proxy': 'something'}
service = Service('foo',
client=self.mock_client,
build={'context': '.', 'args': args})
self.mock_client.inspect_image.return_value = {'Id': 'abc123'}
self.mock_client.build.return_value = [
'{"stream": "Successfully built abcd"}',
]
with mock.patch('compose.service.log', autospec=True) as mock_log:
service.ensure_image_exists(do_build=BuildAction.force)
assert not mock_log.warn.called
self.mock_client.build.assert_called_once_with(
tag='default_foo',
dockerfile=None,
stream=True,
path='.',
pull=False,
forcerm=False,
nocache=False,
rm=True,
buildargs={u'https_proxy': 'something'},
)
def test_build_does_not_pull(self):