mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #51724 from clinta/docker-create-with-ip
add networking_config to container create fixes #51723
This commit is contained in:
commit
d2fd84fca0
3 changed files with 44 additions and 0 deletions
|
@ -846,6 +846,13 @@ def _get_create_kwargs(skip_translate=None,
|
|||
Take input kwargs and return a kwargs dict to pass to docker-py's
|
||||
create_container() function.
|
||||
'''
|
||||
|
||||
networks = kwargs.pop('networks', {})
|
||||
if kwargs.get('network_mode', '') in networks:
|
||||
networks = {kwargs['network_mode']: networks[kwargs['network_mode']]}
|
||||
else:
|
||||
networks = {}
|
||||
|
||||
kwargs = __utils__['docker.translate_input'](
|
||||
salt.utils.docker.translate.container,
|
||||
skip_translate=skip_translate,
|
||||
|
@ -853,6 +860,9 @@ def _get_create_kwargs(skip_translate=None,
|
|||
validate_ip_addrs=validate_ip_addrs,
|
||||
**__utils__['args.clean_kwargs'](**kwargs))
|
||||
|
||||
if networks:
|
||||
kwargs['networking_config'] = _create_networking_config(networks)
|
||||
|
||||
if client_args is None:
|
||||
try:
|
||||
client_args = get_client_args(['create_container', 'host_config'])
|
||||
|
@ -2388,6 +2398,11 @@ def version():
|
|||
return ret
|
||||
|
||||
|
||||
def _create_networking_config(networks):
|
||||
log.debug("creating networking config from {}".format(networks))
|
||||
return _client_wrapper('create_networking_config',
|
||||
{k: _client_wrapper('create_endpoint_config', **v) for k, v in networks.items()})
|
||||
|
||||
# Functions to manage containers
|
||||
@_refresh_mine_cache
|
||||
def create(image,
|
||||
|
|
|
@ -1673,6 +1673,8 @@ def running(name,
|
|||
|
||||
try:
|
||||
networks = _parse_networks(networks)
|
||||
if networks:
|
||||
kwargs['networks'] = networks
|
||||
image_id = _resolve_image(ret, image, client_timeout)
|
||||
except CommandExecutionError as exc:
|
||||
ret['result'] = False
|
||||
|
|
|
@ -599,6 +599,33 @@ class DockerContainerTestCase(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertTrue('VAR2=value2' in ret['Config']['Env'])
|
||||
self.assertTrue('VAR3=value3' not in ret['Config']['Env'])
|
||||
|
||||
@with_network(subnet='10.247.197.96/27', create=True)
|
||||
@container_name
|
||||
def test_static_ip_one_network(self, container_name, net):
|
||||
'''
|
||||
Ensure that if a network is created and specified as network_mode, that is the only network, and
|
||||
the static IP is applied.
|
||||
'''
|
||||
requested_ip = '10.247.197.100'
|
||||
kwargs = {
|
||||
'name': container_name,
|
||||
'image': self.image,
|
||||
'network_mode': net.name,
|
||||
'networks': [{net.name: [{'ipv4_address': requested_ip}]}],
|
||||
'shutdown_timeout': 1,
|
||||
}
|
||||
# Create a container
|
||||
ret = self.run_state('docker_container.running', **kwargs)
|
||||
self.assertSaltTrueReturn(ret)
|
||||
|
||||
inspect_result = self.run_function('docker.inspect_container',
|
||||
[container_name])
|
||||
connected_networks = inspect_result['NetworkSettings']['Networks']
|
||||
|
||||
self.assertEqual(list(connected_networks.keys()), [net.name])
|
||||
self.assertEqual(inspect_result['HostConfig']['NetworkMode'], net.name)
|
||||
self.assertEqual(connected_networks[net.name]['IPAMConfig']['IPv4Address'], requested_ip)
|
||||
|
||||
def _test_running(self, container_name, *nets):
|
||||
'''
|
||||
DRY function for testing static IPs
|
||||
|
|
Loading…
Add table
Reference in a new issue