Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
    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
Esempio n. 4
0
    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