Merge "Pick up proxy buildargs from environment"
This commit is contained in:
commit
87355c231a
@ -203,6 +203,23 @@ class WorkerThread(threading.Thread):
|
|||||||
|
|
||||||
return dest_archive
|
return dest_archive
|
||||||
|
|
||||||
|
def update_buildargs(self):
|
||||||
|
buildargs = dict()
|
||||||
|
if self.conf.build_args:
|
||||||
|
buildargs = dict(self.conf.build_args)
|
||||||
|
|
||||||
|
proxy_vars = ('HTTP_PROXY', 'http_proxy', 'HTTPS_PROXY',
|
||||||
|
'https_proxy', 'FTP_PROXY', 'ftp_proxy',
|
||||||
|
'NO_PROXY', 'no_proxy')
|
||||||
|
|
||||||
|
for proxy_var in proxy_vars:
|
||||||
|
if proxy_var in os.environ and proxy_var not in buildargs:
|
||||||
|
buildargs[proxy_var] = os.environ.get(proxy_var)
|
||||||
|
|
||||||
|
if not buildargs:
|
||||||
|
return None
|
||||||
|
return buildargs
|
||||||
|
|
||||||
def builder(self, image):
|
def builder(self, image):
|
||||||
LOG.debug('%s:Processing', image['name'])
|
LOG.debug('%s:Processing', image['name'])
|
||||||
if image['status'] == 'unmatched':
|
if image['status'] == 'unmatched':
|
||||||
@ -255,13 +272,14 @@ class WorkerThread(threading.Thread):
|
|||||||
pull = True if image['parent'] is None else False
|
pull = True if image['parent'] is None else False
|
||||||
|
|
||||||
image['logs'] = str()
|
image['logs'] = str()
|
||||||
|
buildargs = self.update_buildargs()
|
||||||
for response in self.dc.build(path=image['path'],
|
for response in self.dc.build(path=image['path'],
|
||||||
tag=image['fullname'],
|
tag=image['fullname'],
|
||||||
nocache=self.nocache,
|
nocache=self.nocache,
|
||||||
rm=True,
|
rm=True,
|
||||||
pull=pull,
|
pull=pull,
|
||||||
forcerm=self.forcerm,
|
forcerm=self.forcerm,
|
||||||
buildargs=self.conf.build_args):
|
buildargs=buildargs):
|
||||||
stream = json.loads(response.decode('utf-8'))
|
stream = json.loads(response.decode('utf-8'))
|
||||||
|
|
||||||
if 'stream' in stream:
|
if 'stream' in stream:
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import mock
|
import mock
|
||||||
|
import os
|
||||||
|
|
||||||
from kolla.cmd import build
|
from kolla.cmd import build
|
||||||
from kolla.tests import base
|
from kolla.tests import base
|
||||||
@ -34,6 +35,7 @@ class WorkerThreadTest(base.TestCase):
|
|||||||
# NOTE(jeffrey4l): use a real, temporary dir
|
# NOTE(jeffrey4l): use a real, temporary dir
|
||||||
FAKE_IMAGE['path'] = self.useFixture(fixtures.TempDir()).path
|
FAKE_IMAGE['path'] = self.useFixture(fixtures.TempDir()).path
|
||||||
|
|
||||||
|
@mock.patch.dict(os.environ, clear=True)
|
||||||
@mock.patch('docker.Client')
|
@mock.patch('docker.Client')
|
||||||
def test_build_image(self, mock_client):
|
def test_build_image(self, mock_client):
|
||||||
queue = mock.Mock()
|
queue = mock.Mock()
|
||||||
@ -48,6 +50,7 @@ class WorkerThreadTest(base.TestCase):
|
|||||||
nocache=False, rm=True, pull=True, forcerm=True,
|
nocache=False, rm=True, pull=True, forcerm=True,
|
||||||
buildargs=None)
|
buildargs=None)
|
||||||
|
|
||||||
|
@mock.patch.dict(os.environ, clear=True)
|
||||||
@mock.patch('docker.Client')
|
@mock.patch('docker.Client')
|
||||||
def test_build_image_with_build_arg(self, mock_client):
|
def test_build_image_with_build_arg(self, mock_client):
|
||||||
build_args = {
|
build_args = {
|
||||||
@ -64,3 +67,38 @@ class WorkerThreadTest(base.TestCase):
|
|||||||
path=FAKE_IMAGE['path'], tag=FAKE_IMAGE['fullname'],
|
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=build_args)
|
buildargs=build_args)
|
||||||
|
|
||||||
|
@mock.patch.dict(os.environ, {'http_proxy': 'http://FROM_ENV:8080'},
|
||||||
|
clear=True)
|
||||||
|
@mock.patch('docker.Client')
|
||||||
|
def test_build_arg_from_env(self, mock_client):
|
||||||
|
build_args = {
|
||||||
|
'http_proxy': 'http://FROM_ENV:8080',
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
|
||||||
|
@mock.patch.dict(os.environ, {'http_proxy': 'http://FROM_ENV:8080'},
|
||||||
|
clear=True)
|
||||||
|
@mock.patch('docker.Client')
|
||||||
|
def test_build_arg_precedence(self, mock_client):
|
||||||
|
build_args = {
|
||||||
|
'http_proxy': 'http://localhost:8080',
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user