mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
Merge pull request #27630 from ticosax/include-container-id-docker-mine
Expose container_id in mine.get_docker
This commit is contained in:
commit
77516912fa
@ -294,13 +294,19 @@ def flush():
|
|||||||
return _mine_send(load, __opts__)
|
return _mine_send(load, __opts__)
|
||||||
|
|
||||||
|
|
||||||
def get_docker(interfaces=None, cidrs=None):
|
def get_docker(interfaces=None, cidrs=None, with_container_id=False):
|
||||||
'''
|
'''
|
||||||
Get all mine data for 'docker.get_containers' and run an aggregation
|
Get all mine data for 'docker.get_containers' and run an aggregation
|
||||||
routine. The "interfaces" parameter allows for specifying which network
|
routine. The "interfaces" parameter allows for specifying which network
|
||||||
interfaces to select ip addresses from. The "cidrs" parameter allows for
|
interfaces to select ip addresses from. The "cidrs" parameter allows for
|
||||||
specifying a list of cidrs which the ip address must match.
|
specifying a list of cidrs which the ip address must match.
|
||||||
|
|
||||||
|
with_container_id
|
||||||
|
Boolean, to expose container_id in the list of results
|
||||||
|
|
||||||
|
.. versionadded:: 2015.8.2
|
||||||
|
|
||||||
|
|
||||||
CLI Example:
|
CLI Example:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -358,6 +364,7 @@ def get_docker(interfaces=None, cidrs=None):
|
|||||||
|
|
||||||
# Process each container
|
# Process each container
|
||||||
for container in six.itervalues(containers):
|
for container in six.itervalues(containers):
|
||||||
|
container_id = container['Info']['Id']
|
||||||
if container['Image'] not in proxy_lists:
|
if container['Image'] not in proxy_lists:
|
||||||
proxy_lists[container['Image']] = {}
|
proxy_lists[container['Image']] = {}
|
||||||
for dock_port in container['Ports']:
|
for dock_port in container['Ports']:
|
||||||
@ -366,12 +373,22 @@ def get_docker(interfaces=None, cidrs=None):
|
|||||||
# If port is 0.0.0.0, then we must get the docker host IP
|
# If port is 0.0.0.0, then we must get the docker host IP
|
||||||
if ip_address == '0.0.0.0':
|
if ip_address == '0.0.0.0':
|
||||||
for ip_ in host_ips:
|
for ip_ in host_ips:
|
||||||
proxy_lists[container['Image']].setdefault('ipv4', {}).setdefault(dock_port['PrivatePort'], []).append(
|
containers = proxy_lists[container['Image']].setdefault('ipv4', {}).setdefault(dock_port['PrivatePort'], [])
|
||||||
'{0}:{1}'.format(ip_, dock_port['PublicPort']))
|
container_network_footprint = '{0}:{1}'.format(ip_, dock_port['PublicPort'])
|
||||||
proxy_lists[container['Image']]['ipv4'][dock_port['PrivatePort']] = list(set(proxy_lists[container['Image']]['ipv4'][dock_port['PrivatePort']]))
|
if with_container_id:
|
||||||
|
value = (container_network_footprint, container_id)
|
||||||
|
else:
|
||||||
|
value = container_network_footprint
|
||||||
|
if value not in containers:
|
||||||
|
containers.append(value)
|
||||||
elif ip_address:
|
elif ip_address:
|
||||||
proxy_lists[container['Image']].setdefault('ipv4', {}).setdefault(dock_port['PrivatePort'], []).append(
|
containers = proxy_lists[container['Image']].setdefault('ipv4', {}).setdefault(dock_port['PrivatePort'], [])
|
||||||
'{0}:{1}'.format(dock_port['IP'], dock_port['PublicPort']))
|
container_network_footprint = '{0}:{1}'.format(dock_port['IP'], dock_port['PublicPort'])
|
||||||
proxy_lists[container['Image']]['ipv4'][dock_port['PrivatePort']] = list(set(proxy_lists[container['Image']]['ipv4'][dock_port['PrivatePort']]))
|
if with_container_id:
|
||||||
|
value = (container_network_footprint, container_id)
|
||||||
|
else:
|
||||||
|
value = container_network_footprint
|
||||||
|
if value not in containers:
|
||||||
|
containers.append(value)
|
||||||
|
|
||||||
return proxy_lists
|
return proxy_lists
|
||||||
|
@ -190,14 +190,62 @@ class MineTestCase(TestCase):
|
|||||||
'PrivatePort': 80,
|
'PrivatePort': 80,
|
||||||
'PublicPort': 80,
|
'PublicPort': 80,
|
||||||
'Type': 'tcp'}],
|
'Type': 'tcp'}],
|
||||||
'Image': 'image:latest'
|
'Image': 'image:latest',
|
||||||
|
'Info': {'Id': 'abcdefhjhi1234567899'},
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
with patch.object(mine, 'get', return_value=ps_response):
|
with patch.object(mine, 'get', return_value=ps_response):
|
||||||
self.assertEqual(mine.get_docker(),
|
self.assertEqual(mine.get_docker(),
|
||||||
{'image:latest': {
|
{'image:latest': {
|
||||||
'ipv4': {80: ['192.168.0.1:80',
|
'ipv4': {80: [
|
||||||
'172.17.42.1:80']}}})
|
'172.17.42.1:80',
|
||||||
|
'192.168.0.1:80',
|
||||||
|
]}}})
|
||||||
|
|
||||||
|
def test_get_docker_with_container_id(self):
|
||||||
|
'''
|
||||||
|
Test for Get all mine data for 'dockerng.ps' and run an
|
||||||
|
aggregation.
|
||||||
|
'''
|
||||||
|
ps_response = {
|
||||||
|
'localhost': {
|
||||||
|
'host': {
|
||||||
|
'interfaces': {
|
||||||
|
'docker0': {
|
||||||
|
'hwaddr': '88:99:00:00:99:99',
|
||||||
|
'inet': [{'address': '172.17.42.1',
|
||||||
|
'broadcast': None,
|
||||||
|
'label': 'docker0',
|
||||||
|
'netmask': '255.255.0.0'}],
|
||||||
|
'inet6': [{'address': 'ffff::eeee:aaaa:bbbb:8888',
|
||||||
|
'prefixlen': '64'}],
|
||||||
|
'up': True},
|
||||||
|
'eth0': {'hwaddr': '88:99:00:99:99:99',
|
||||||
|
'inet': [{'address': '192.168.0.1',
|
||||||
|
'broadcast': '192.168.0.255',
|
||||||
|
'label': 'eth0',
|
||||||
|
'netmask': '255.255.255.0'}],
|
||||||
|
'inet6': [{'address':
|
||||||
|
'ffff::aaaa:aaaa:bbbb:8888',
|
||||||
|
'prefixlen': '64'}],
|
||||||
|
'up': True},
|
||||||
|
}},
|
||||||
|
'abcdefhjhi1234567899': { # container Id
|
||||||
|
'Ports': [{'IP': '0.0.0.0', # we bind on every interfaces
|
||||||
|
'PrivatePort': 80,
|
||||||
|
'PublicPort': 80,
|
||||||
|
'Type': 'tcp'}],
|
||||||
|
'Image': 'image:latest',
|
||||||
|
'Info': {'Id': 'abcdefhjhi1234567899'},
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
with patch.object(mine, 'get', return_value=ps_response):
|
||||||
|
self.assertEqual(mine.get_docker(with_container_id=True),
|
||||||
|
{'image:latest': {
|
||||||
|
'ipv4': {80: [
|
||||||
|
('172.17.42.1:80', 'abcdefhjhi1234567899'),
|
||||||
|
('192.168.0.1:80', 'abcdefhjhi1234567899'),
|
||||||
|
]}}})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
Reference in New Issue
Block a user