def cntnr_ip_map(self): """ Return mapping of container names to IP addresses """ # map container eth0 ifindex's to names dc = DockerContainers(self) names = dc.list_container_names() jsons = [dc.json_by_name(name)[0] for name in names] njs = dict(zip(names, jsons)) result = {} for name in [_ for _ in njs if njs[_]["NetworkSettings"]["IPAddress"] != ""]: result[name] = njs[name]["NetworkSettings"]["IPAddress"] self.logdebug("%s -> %s", name, result[name]) return result
def cntnr_ip_map(self): """ Return mapping of container names to IP addresses """ # map container eth0 ifindex's to names dc = DockerContainers(self) names = dc.list_container_names() jsons = [dc.json_by_name(name)[0] for name in names] njs = dict(list(zip(names, jsons))) result = {} for name in [_ for _ in njs if njs[_]["NetworkSettings"]["IPAddress"] != ""]: result[name] = njs[name]["NetworkSettings"]["IPAddress"] self.logdebug("%s -> %s", name, result[name]) return result
def cntnr_veth_map(self): """ Return mapping of container names to veth* devices """ # map ifindex's to ``veth*`` names on host tmp_cmd = 'brctl show' cmd_result = utils.run(tmp_cmd, verbose=False) veths = re.findall(r'veth\w+', cmd_result.stdout) ifindex = [ int(open('/sys/class/net/%s/ifindex' % veth, 'r').read()) for veth in veths ] index_host = dict(zip(ifindex, veths)) self.logdebug("Host index to veth: %s", index_host) # map container eth0 ifindex's to names dc = DockerContainers(self) names = dc.list_container_names() jsons = [dc.json_by_name(name)[0] for name in names] njs = dict(zip(names, jsons)) result = {} for name in [ _name for (_name, json) in njs.iteritems() if json["NetworkSettings"]["MacAddress"] != "" ]: subargs = [name, 'cat', '/sys/class/net/eth0/ifindex'] dkrcmd = DockerCmd(self, 'exec', subargs, verbose=False) dkrcmd.execute() if dkrcmd.exit_status == 0: # Host's ifindex always one greater than container's ifindex = int(dkrcmd.stdout) + 1 # State could have changed during looping if ifindex in index_host: result[name] = index_host[ifindex] else: self.logdebug("Host veth %s dissapeared while mapping %s", ifindex, name) else: self.logdebug("Can't examine eth0 for container %s", name) self.logdebug("Container names to veth: %s", result) return result
def cntnr_veth_map(self): """ Return mapping of container names to veth* devices """ # map ifindex's to ``veth*`` names on host tmp_cmd = 'brctl show' cmd_result = utils.run(tmp_cmd, verbose=False) veths = re.findall(r'veth\w+', cmd_result.stdout) ifindex = [int(open('/sys/class/net/%s/ifindex' % veth, 'r').read()) for veth in veths] index_host = dict(zip(ifindex, veths)) self.logdebug("Host index to veth: %s", index_host) # map container eth0 ifindex's to names dc = DockerContainers(self) names = dc.list_container_names() jsons = [dc.json_by_name(name)[0] for name in names] njs = dict(zip(names, jsons)) result = {} for name in [_name for (_name, json) in njs.iteritems() if json["NetworkSettings"]["MacAddress"] != ""]: subargs = [name, 'cat', '/sys/class/net/eth0/ifindex'] dkrcmd = DockerCmd(self, 'exec', subargs, verbose=False) dkrcmd.execute() if dkrcmd.exit_status == 0: # Host's ifindex always one greater than container's ifindex = int(dkrcmd.stdout) + 1 # State could have changed during looping if ifindex in index_host: result[name] = index_host[ifindex] else: self.logdebug("Host veth %s dissapeared while mapping %s", ifindex, name) else: self.logdebug("Can't examine eth0 for container %s", name) self.logdebug("Container names to veth: %s", result) return result