def resume_node(name): check_not_null(name, "the image name cannot be null") try: __resume(name=name) except Exception as ex: raise RuntimeError(ex.__cause__)
def get_control_ip(name): check_not_null(name, "the image name cannot be null") try: return __control_ip(name=name) except Exception as ex: raise RuntimeError(ex.__cause__)
def _create_pair(ifname, peer, netns=None, mtu=1500): check_not_null(ifname, "the interface name cannot be null") check_not_null(peer, "the peer interface name cannot be null") def create(): with IPRoute() as ipr: ipr.link("add", ifname=ifname, kind="veth", peer=peer) ifnet = ipr.link_lookup(ifname=ifname)[0] ifpeer = ipr.link_lookup(ifname=peer)[0] ipr.link("set", index=ifnet, mtu=mtu) ipr.link("set", index=ifnet, state="up") ipr.link("set", index=ifpeer, mtu=mtu) ipr.link("set", index=ifpeer, state="up") def create_ns(): with NetNS(netns=netns) as ipr: ipr.link("add", ifname=ifname, kind="veth", peer=peer) ifnet = ipr.link_lookup(ifname=ifname)[0] ifpeer = ipr.link_lookup(ifname=peer)[0] ipr.link("set", index=ifnet, mtu=mtu) ipr.link("set", index=ifnet, state="up") ipr.link("set", index=ifpeer, mtu=mtu) ipr.link("set", index=ifpeer, state="up") if netns is None: create() else: create_ns()
def create_node(name, image, **params): check_not_null(image, "the image value cannot be null") try: params.update(name=name, hostname=name) return __create(image=image, **params) except Exception as ex: raise RuntimeError(ex)
def _create_bridge(ifname, slaves=None, netns=None, mtu=1500): check_not_null(ifname, "the interface name cannot be null") def create(): with IPRoute() as ipr: ipr.link("add", ifname=ifname, kind="bridge") inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("set", index=inet, mtu=mtu) if slaves is not None: for i in slaves: port = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=port, master=inet) ipr.link("set", index=inet, state="up") def create_ns(): with NetNS(netns=netns) as ipr: ipr.link("add", ifname=ifname, kind="bridge") inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("set", index=inet, mtu=mtu) if slaves is not None: for i in slaves: port = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=port, master=inet) ipr.link("set", index=inet, state="up") if netns is None: create() else: create_ns()
def services_node(name): check_not_null(name, "the image name cannot be null") try: return __services(name=name) except Exception as ex: raise RuntimeError(ex.__cause__)
def __rename(name, new_name): check_not_null(name, "the container name cannot be null") check_not_null(new_name, "the container new name cannot be null") client = docker.from_env() container = client.containers.get(container_id=name) container.rename(new_name)
def _add_port_ns(ifname, netns, new_name=None): check_not_null(ifname, "the interface name cannot be null") check_not_null(netns, "the namespace node cannot be null") with IPRoute() as ipr: idx = ipr.link_lookup(ifname=ifname)[0] if new_name is not None: ipr.link('set', index=idx, net_ns_fd=netns, ifname=new_name, state="up") else: ipr.link('set', index=idx, net_ns_fd=netns, state="up")
def _get_interface_addr(ifname, netns=None): check_not_null(ifname, "the interface name cannot be null") def get_addr(): with IPRoute() as ipr: inet = ipr.get_addr(label=ifname) ret = inet[0]["attrs"][0][1] return ret def get_ns_addr(): with NetNS(netns=netns) as ipr: inet = ipr.get_addr(label=ifname) ret = inet[0]["attrs"][0][1] return ret return (get_addr() if netns is None else get_ns_addr())
def _delete_interface(ifname, netns=None): check_not_null(ifname, "the interface name cannot be null") def delport(): with IPRoute() as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("del", index=inet) def delportns(): with NetNS(netns=netns) as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("del", index=inet) if netns is None: delport() else: delportns()
def _get_interface_mac(ifname, netns=None): check_not_null(ifname, "the interface name cannot be null") def get_mac(): with IPRoute() as ipr: idx = ipr.link_lookup(ifname=ifname) inet = ipr.link("get", index=idx) ret = inet[0]['attrs'][18][1] return ret def get_mac_ns(): with NetNS(netns=netns) as ipr: idx = ipr.link_lookup(ifname=ifname) inet = ipr.link("get", index=idx) ret = inet[0]['attrs'][19][1] return ret return (get_mac() if netns is None else get_mac_ns())
def _switch_off(ifname, netns=None): check_not_null(ifname, "the interface name cannot be null") def switchoff(): with IPRoute() as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("set", index=inet, state="down") ipr.close() def switchoffns(): with NetNS(netns=netns) as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.link("set", index=inet, state="down") ipr.close() if netns is None: switchoff() else: switchoffns()
def _bridge_del_port(master, slaves=[], netns=None): check_not_null(master, "the master bridge name cannot be null") def delport(): with IPRoute() as ipr: for i in slaves: slave = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=slave, master=0) def delportns(): with NetNS(netns=netns) as ipr: for i in slaves: slave = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=slave, master=0) if netns is None: delport() else: delportns()
def _bridge_add_port(master, slaves=[], netns=None): check_not_null(master, "the master bridge name cannot be null") def addport(): with IPRoute() as ipr: inet = ipr.link_lookup(ifname=master)[0] for i in slaves: slave = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=slave, master=inet) def addporns(): with NetNS(netns=netns) as ipr: inet = ipr.link_lookup(ifname=master)[0] for i in slaves: slave = ipr.link_lookup(ifname=i)[0] ipr.link("set", index=slave, master=inet) if netns is None: addport() else: addporns()
def _config_ip_address(ifname, ip_addr, mask, gateway=None, netns=None): check_not_null(ifname, "the interface name cannot be null") check_not_null(ip_addr, "the ip address of the interface cannot be null") def configip(): with IPRoute() as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.addr("add", index=inet, address=ip_addr, mask=int(mask)) if gateway is not None: ipr.route("add", dst="default", gateway=gateway) def configipns(): with NetNS(netns=netns) as ipr: inet = ipr.link_lookup(ifname=ifname)[0] ipr.addr("add", index=inet, address=ip_addr, mask=int(mask)) if gateway is not None: ipr.route("add", dst="default", gateway=gateway) if netns is None: configip() else: configipns()
def __control_ip(name): check_not_null(name, "the container name cannot be null") client = docker.from_env() container = client.containers.get(container_id=name) return container.attrs["NetworkSettings"]["IPAddress"]
def run_cmd(name, cmd): check_not_null(name, "the image name cannot be null") try: return __exec(name=name, cmd=cmd) except Exception as ex: raise RuntimeError(ex.__cause__)
def __services(name): check_not_null(name, "the container name cannot be null") client = docker.from_env() container = client.containers.get(container_id=name) return container.attrs["Config"]["ExposedPorts"]
def get_shell(name, shell="bash"): check_not_null(name, "the image name cannot be null") try: __shell(name=name, shell=shell) except Exception as ex: raise RuntimeError(ex.__cause__)