diff --git a/daemon/core/errors.py b/daemon/core/errors.py index 5b76abb3..f5c38b5b 100644 --- a/daemon/core/errors.py +++ b/daemon/core/errors.py @@ -10,11 +10,9 @@ class CoreCommandError(subprocess.CalledProcessError): """ def __str__(self): - return "Command(%s), Status(%s):\nstdout: %s\nstderr: %s" % ( - self.cmd, - self.returncode, - self.output, - self.stderr, + return ( + f"Command({self.cmd}), Status({self.returncode}):\n" + f"stdout: {self.output}\nstderr: {self.stderr}" ) diff --git a/daemon/core/nodes/client.py b/daemon/core/nodes/client.py index 632e12bc..299b8135 100644 --- a/daemon/core/nodes/client.py +++ b/daemon/core/nodes/client.py @@ -51,7 +51,7 @@ class VnodeClient(object): pass def create_cmd(self, args): - return "%s -c %s -- %s" % (VCMD_BIN, self.ctrlchnlname, args) + return f"{VCMD_BIN} -c {self.ctrlchnlname} -- {args}" def check_cmd(self, args, wait=True): """ diff --git a/daemon/core/nodes/docker.py b/daemon/core/nodes/docker.py index 17d7578a..df8422af 100644 --- a/daemon/core/nodes/docker.py +++ b/daemon/core/nodes/docker.py @@ -226,13 +226,13 @@ class DockerNode(CoreNode): temp.close() if directory: - self.node_net_cmd("mkdir -m %o -p %s" % (0o755, directory)) + self.node_net_cmd(f"mkdir -m {0o755:o} -p {directory}") if self.server is not None: self.server.remote_put(temp.name, temp.name) self.client.copy_file(temp.name, filename) - self.node_net_cmd("chmod %o %s" % (mode, filename)) + self.node_net_cmd(f"chmod {mode:o} {filename}") if self.server is not None: - self.net_cmd("rm -f %s" % temp.name) + self.net_cmd(f"rm -f {temp.name}") os.unlink(temp.name) logging.debug( "node(%s) added file: %s; mode: 0%o", self.name, filename, mode @@ -252,7 +252,7 @@ class DockerNode(CoreNode): "node file copy file(%s) source(%s) mode(%s)", filename, srcfilename, mode ) directory = os.path.dirname(filename) - self.node_net_cmd("mkdir -p %s" % directory) + self.node_net_cmd(f"mkdir -p {directory}") if self.server is None: source = srcfilename @@ -262,4 +262,4 @@ class DockerNode(CoreNode): self.server.remote_put(source, temp.name) self.client.copy_file(source, filename) - self.node_net_cmd("chmod %o %s" % (mode, filename)) + self.node_net_cmd(f"chmod {mode:o} {filename}") diff --git a/daemon/core/nodes/interface.py b/daemon/core/nodes/interface.py index 3e4f73ef..c8841432 100644 --- a/daemon/core/nodes/interface.py +++ b/daemon/core/nodes/interface.py @@ -344,7 +344,7 @@ class TunTap(CoreInterface): if r == 0: result = True break - msg = "attempt %s failed with nonzero exit status %s" % (i, r) + msg = f"attempt {i} failed with nonzero exit status {r}" if i < attempts + 1: msg += ", retrying..." logging.info(msg) @@ -480,7 +480,7 @@ class GreTap(CoreInterface): self.id = _id sessionid = self.session.short_session_id() # interface name on the local host machine - self.localname = "gt.%s.%s" % (self.id, sessionid) + self.localname = f"gt.{self.id}.{sessionid}" self.transport_type = "raw" if not start: self.up = False diff --git a/daemon/core/nodes/ipaddress.py b/daemon/core/nodes/ipaddress.py index be2ec36d..df2309ab 100644 --- a/daemon/core/nodes/ipaddress.py +++ b/daemon/core/nodes/ipaddress.py @@ -29,7 +29,7 @@ class MacAddress(object): :return: string representation :rtype: str """ - return ":".join("%02x" % x for x in bytearray(self.addr)) + return ":".join(f"{x:02x}" for x in bytearray(self.addr)) def to_link_local(self): """ @@ -217,14 +217,14 @@ class IpPrefix(object): # prefixstr format: address/prefixlen tmp = prefixstr.split("/") if len(tmp) > 2: - raise ValueError("invalid prefix: %s" % prefixstr) + raise ValueError(f"invalid prefix: {prefixstr}") self.af = af if self.af == AF_INET: self.addrlen = 32 elif self.af == AF_INET6: self.addrlen = 128 else: - raise ValueError("invalid address family: %s" % self.af) + raise ValueError(f"invalid address family: {self.af}") if len(tmp) == 2: self.prefixlen = int(tmp[1]) else: @@ -247,7 +247,8 @@ class IpPrefix(object): :return: string representation :rtype: str """ - return "%s/%s" % (socket.inet_ntop(self.af, self.prefix), self.prefixlen) + address = socket.inet_ntop(self.af, self.prefix) + return f"{address}/{self.prefixlen}" def __eq__(self, other): """ @@ -283,7 +284,7 @@ class IpPrefix(object): return NotImplemented a = IpAddress(self.af, self.prefix) + (tmp << (self.addrlen - self.prefixlen)) - prefixstr = "%s/%s" % (a, self.prefixlen) + prefixstr = f"{a}/{self.prefixlen}" if self.__class__ == IpPrefix: return self.__class__(self.af, prefixstr) else: @@ -324,7 +325,7 @@ class IpPrefix(object): self.af == AF_INET and tmp == (1 << (self.addrlen - self.prefixlen)) - 1 ) ): - raise ValueError("invalid hostid for prefix %s: %s" % (self, hostid)) + raise ValueError(f"invalid hostid for prefix {self}: {hostid}") addr = bytes(b"") prefix_endpoint = -1 @@ -374,7 +375,7 @@ class IpPrefix(object): :return: prefix string :rtype: str """ - return "%s" % socket.inet_ntop(self.af, self.prefix) + return socket.inet_ntop(self.af, self.prefix) def netmask_str(self): """ diff --git a/daemon/core/nodes/lxd.py b/daemon/core/nodes/lxd.py index b11086e7..50588fb2 100644 --- a/daemon/core/nodes/lxd.py +++ b/daemon/core/nodes/lxd.py @@ -184,13 +184,13 @@ class LxcNode(CoreNode): temp.close() if directory: - self.node_net_cmd("mkdir -m %o -p %s" % (0o755, directory)) + self.node_net_cmd(f"mkdir -m {0o755:o} -p {directory}") if self.server is not None: self.server.remote_put(temp.name, temp.name) self.client.copy_file(temp.name, filename) - self.node_net_cmd("chmod %o %s" % (mode, filename)) + self.node_net_cmd(f"chmod {mode:o} {filename}") if self.server is not None: - self.net_cmd("rm -f %s" % temp.name) + self.net_cmd(f"rm -f {temp.name}") os.unlink(temp.name) logging.debug("node(%s) added file: %s; mode: 0%o", self.name, filename, mode) @@ -208,7 +208,7 @@ class LxcNode(CoreNode): "node file copy file(%s) source(%s) mode(%s)", filename, srcfilename, mode ) directory = os.path.dirname(filename) - self.node_net_cmd("mkdir -p %s" % directory) + self.node_net_cmd(f"mkdir -p {directory}") if self.server is None: source = srcfilename @@ -218,7 +218,7 @@ class LxcNode(CoreNode): self.server.remote_put(source, temp.name) self.client.copy_file(source, filename) - self.node_net_cmd("chmod %o %s" % (mode, filename)) + self.node_net_cmd(f"chmod {mode:o} {filename}") def addnetif(self, netif, ifindex): super(LxcNode, self).addnetif(netif, ifindex) diff --git a/daemon/core/nodes/netclient.py b/daemon/core/nodes/netclient.py index 9234bef5..94e73e7f 100644 --- a/daemon/core/nodes/netclient.py +++ b/daemon/core/nodes/netclient.py @@ -41,7 +41,7 @@ class LinuxNetClient(object): :param str name: name for hostname :return: nothing """ - self.run("hostname %s" % name) + self.run(f"hostname {name}") def create_route(self, route, device): """ @@ -51,7 +51,7 @@ class LinuxNetClient(object): :param str device: device to add route to :return: nothing """ - self.run("%s route add %s dev %s" % (IP_BIN, route, device)) + self.run(f"{IP_BIN} route add {route} dev {device}") def device_up(self, device): """ @@ -60,7 +60,7 @@ class LinuxNetClient(object): :param str device: device to bring up :return: nothing """ - self.run("%s link set %s up" % (IP_BIN, device)) + self.run(f"{IP_BIN} link set {device} up") def device_down(self, device): """ @@ -69,7 +69,7 @@ class LinuxNetClient(object): :param str device: device to bring down :return: nothing """ - self.run("%s link set %s down" % (IP_BIN, device)) + self.run(f"{IP_BIN} link set {device} down") def device_name(self, device, name): """ @@ -79,7 +79,7 @@ class LinuxNetClient(object): :param str name: name to set :return: nothing """ - self.run("%s link set %s name %s" % (IP_BIN, device, name)) + self.run(f"{IP_BIN} link set {device} name {name}") def device_show(self, device): """ @@ -89,7 +89,7 @@ class LinuxNetClient(object): :return: device information :rtype: str """ - return self.run("%s link show %s" % (IP_BIN, device)) + return self.run(f"{IP_BIN} link show {device}") def device_ns(self, device, namespace): """ @@ -99,7 +99,7 @@ class LinuxNetClient(object): :param str namespace: namespace to set device to :return: nothing """ - self.run("%s link set %s netns %s" % (IP_BIN, device, namespace)) + self.run(f"{IP_BIN} link set {device} netns {namespace}") def device_flush(self, device): """ @@ -108,7 +108,7 @@ class LinuxNetClient(object): :param str device: device to flush :return: nothing """ - self.run("%s -6 address flush dev %s" % (IP_BIN, device)) + self.run(f"{IP_BIN} -6 address flush dev {device}") def device_mac(self, device, mac): """ @@ -118,7 +118,7 @@ class LinuxNetClient(object): :param str mac: mac to set :return: nothing """ - self.run("%s link set dev %s address %s" % (IP_BIN, device, mac)) + self.run(f"{IP_BIN} link set dev {device} address {mac}") def delete_device(self, device): """ @@ -127,7 +127,7 @@ class LinuxNetClient(object): :param str device: device to delete :return: nothing """ - self.run("%s link delete %s" % (IP_BIN, device)) + self.run(f"{IP_BIN} link delete {device}") def delete_tc(self, device): """ @@ -136,7 +136,7 @@ class LinuxNetClient(object): :param str device: device to remove tc :return: nothing """ - self.run("%s qdisc delete dev %s root" % (TC_BIN, device)) + self.run(f"{TC_BIN} qdisc delete dev {device} root") def checksums_off(self, interface_name): """ @@ -145,7 +145,7 @@ class LinuxNetClient(object): :param str interface_name: interface to update :return: nothing """ - self.run("%s -K %s rx off tx off" % (ETHTOOL_BIN, interface_name)) + self.run(f"{ETHTOOL_BIN} -K {interface_name} rx off tx off") def create_address(self, device, address, broadcast=None): """ @@ -158,11 +158,10 @@ class LinuxNetClient(object): """ if broadcast is not None: self.run( - "%s address add %s broadcast %s dev %s" - % (IP_BIN, address, broadcast, device) + f"{IP_BIN} address add {address} broadcast {broadcast} dev {device}" ) else: - self.run("%s address add %s dev %s" % (IP_BIN, address, device)) + self.run(f"{IP_BIN} address add {address} dev {device}") def delete_address(self, device, address): """ @@ -172,7 +171,7 @@ class LinuxNetClient(object): :param str address: address to remove :return: nothing """ - self.run("%s address delete %s dev %s" % (IP_BIN, address, device)) + self.run(f"{IP_BIN} address delete {address} dev {device}") def create_veth(self, name, peer): """ @@ -182,7 +181,7 @@ class LinuxNetClient(object): :param str peer: peer name :return: nothing """ - self.run("%s link add name %s type veth peer name %s" % (IP_BIN, name, peer)) + self.run(f"{IP_BIN} link add name {name} type veth peer name {peer}") def create_gretap(self, device, address, local, ttl, key): """ @@ -195,13 +194,13 @@ class LinuxNetClient(object): :param int key: key for tap :return: nothing """ - cmd = "%s link add %s type gretap remote %s" % (IP_BIN, device, address) + cmd = f"{IP_BIN} link add {device} type gretap remote {address}" if local is not None: - cmd += " local %s" % local + cmd += f" local {local}" if ttl is not None: - cmd += " ttl %s" % ttl + cmd += f" ttl {ttl}" if key is not None: - cmd += " key %s" % key + cmd += f" key {key}" self.run(cmd) def create_bridge(self, name): @@ -211,13 +210,13 @@ class LinuxNetClient(object): :param str name: bridge name :return: nothing """ - self.run("%s addbr %s" % (BRCTL_BIN, name)) - self.run("%s stp %s off" % (BRCTL_BIN, name)) - self.run("%s setfd %s 0" % (BRCTL_BIN, name)) + self.run(f"{BRCTL_BIN} addbr {name}") + self.run(f"{BRCTL_BIN} stp {name} off") + self.run(f"{BRCTL_BIN} setfd {name} 0") self.device_up(name) # turn off multicast snooping so forwarding occurs w/o IGMP joins - snoop = "/sys/devices/virtual/net/%s/bridge/multicast_snooping" % name + snoop = f"/sys/devices/virtual/net/{name}/bridge/multicast_snooping" if os.path.exists(snoop): with open(snoop, "w") as f: f.write("0") @@ -230,7 +229,7 @@ class LinuxNetClient(object): :return: nothing """ self.device_down(name) - self.run("%s delbr %s" % (BRCTL_BIN, name)) + self.run(f"{BRCTL_BIN} delbr {name}") def create_interface(self, bridge_name, interface_name): """ @@ -240,7 +239,7 @@ class LinuxNetClient(object): :param str interface_name: interface name :return: nothing """ - self.run("%s addif %s %s" % (BRCTL_BIN, bridge_name, interface_name)) + self.run(f"{BRCTL_BIN} addif {bridge_name} {interface_name}") self.device_up(interface_name) def delete_interface(self, bridge_name, interface_name): @@ -251,7 +250,7 @@ class LinuxNetClient(object): :param str interface_name: interface name :return: nothing """ - self.run("%s delif %s %s" % (BRCTL_BIN, bridge_name, interface_name)) + self.run(f"{BRCTL_BIN} delif {bridge_name} {interface_name}") def existing_bridges(self, _id): """ @@ -259,7 +258,7 @@ class LinuxNetClient(object): :param _id: node id to check bridges for """ - output = self.run("%s show" % BRCTL_BIN) + output = self.run(f"{BRCTL_BIN} show") lines = output.split("\n") for line in lines[1:]: columns = line.split() @@ -278,7 +277,7 @@ class LinuxNetClient(object): :param str name: bridge name :return: nothing """ - self.run("%s setageing %s 0" % (BRCTL_BIN, name)) + self.run(f"{BRCTL_BIN} setageing {name} 0") class OvsNetClient(LinuxNetClient): @@ -293,10 +292,10 @@ class OvsNetClient(LinuxNetClient): :param str name: bridge name :return: nothing """ - self.run("%s add-br %s" % (OVS_BIN, name)) - self.run("%s set bridge %s stp_enable=false" % (OVS_BIN, name)) - self.run("%s set bridge %s other_config:stp-max-age=6" % (OVS_BIN, name)) - self.run("%s set bridge %s other_config:stp-forward-delay=4" % (OVS_BIN, name)) + self.run(f"{OVS_BIN} add-br {name}") + self.run(f"{OVS_BIN} set bridge {name} stp_enable=false") + self.run(f"{OVS_BIN} set bridge {name} other_config:stp-max-age=6") + self.run(f"{OVS_BIN} set bridge {name} other_config:stp-forward-delay=4") self.device_up(name) def delete_bridge(self, name): @@ -307,7 +306,7 @@ class OvsNetClient(LinuxNetClient): :return: nothing """ self.device_down(name) - self.run("%s del-br %s" % (OVS_BIN, name)) + self.run(f"{OVS_BIN} del-br {name}") def create_interface(self, bridge_name, interface_name): """ @@ -317,7 +316,7 @@ class OvsNetClient(LinuxNetClient): :param str interface_name: interface name :return: nothing """ - self.run("%s add-port %s %s" % (OVS_BIN, bridge_name, interface_name)) + self.run(f"{OVS_BIN} add-port {bridge_name} {interface_name}") self.device_up(interface_name) def delete_interface(self, bridge_name, interface_name): @@ -328,7 +327,7 @@ class OvsNetClient(LinuxNetClient): :param str interface_name: interface name :return: nothing """ - self.run("%s del-port %s %s" % (OVS_BIN, bridge_name, interface_name)) + self.run(f"{OVS_BIN} del-port {bridge_name} {interface_name}") def existing_bridges(self, _id): """ @@ -336,7 +335,7 @@ class OvsNetClient(LinuxNetClient): :param _id: node id to check bridges for """ - output = self.run("%s list-br" % OVS_BIN) + output = self.run(f"{OVS_BIN} list-br") if output: for line in output.split("\n"): fields = line.split(".") @@ -351,4 +350,4 @@ class OvsNetClient(LinuxNetClient): :param str name: bridge name :return: nothing """ - self.run("%s set bridge %s other_config:mac-aging-time=0" % (OVS_BIN, name)) + self.run(f"{OVS_BIN} set bridge {name} other_config:mac-aging-time=0") diff --git a/daemon/core/nodes/physical.py b/daemon/core/nodes/physical.py index 0f9e0217..cae3f298 100644 --- a/daemon/core/nodes/physical.py +++ b/daemon/core/nodes/physical.py @@ -94,7 +94,7 @@ class PhysicalNode(CoreNodeBase): the emulation, no new interface is created; instead, adopt the GreTap netif as the node interface. """ - netif.name = "gt%d" % ifindex + netif.name = f"gt{ifindex}" netif.node = self self.addnetif(netif, ifindex) @@ -161,7 +161,7 @@ class PhysicalNode(CoreNodeBase): ifindex = self.newifindex() if ifname is None: - ifname = "gt%d" % ifindex + ifname = f"gt{ifindex}" if self.up: # this is reached when this node is linked to a network node @@ -177,7 +177,7 @@ class PhysicalNode(CoreNodeBase): def privatedir(self, path): if path[0] != "/": - raise ValueError("path not fully qualified: %s" % path) + raise ValueError(f"path not fully qualified: {path}") hostpath = os.path.join( self.nodedir, os.path.normpath(path).strip("/").replace("/", ".") ) @@ -188,13 +188,13 @@ class PhysicalNode(CoreNodeBase): source = os.path.abspath(source) logging.info("mounting %s at %s", source, target) os.makedirs(target) - self.net_cmd("%s --bind %s %s" % (MOUNT_BIN, source, target), cwd=self.nodedir) + self.net_cmd(f"{MOUNT_BIN} --bind {source} {target}", cwd=self.nodedir) self._mounts.append((source, target)) def umount(self, target): - logging.info("unmounting '%s'" % target) + logging.info("unmounting '%s'", target) try: - self.net_cmd("%s -l %s" % (UMOUNT_BIN, target), cwd=self.nodedir) + self.net_cmd(f"{UMOUNT_BIN} -l {target}", cwd=self.nodedir) except CoreCommandError: logging.exception("unmounting failed for %s", target) @@ -363,7 +363,7 @@ class Rj45Node(CoreNodeBase, CoreInterface): if ifindex == self.ifindex: self.shutdown() else: - raise ValueError("ifindex %s does not exist" % ifindex) + raise ValueError(f"ifindex {ifindex} does not exist") def netif(self, ifindex, net=None): """ @@ -442,7 +442,7 @@ class Rj45Node(CoreNodeBase, CoreInterface): if len(items) < 2: continue - if items[1] == "%s:" % self.localname: + if items[1] == f"{self.localname}:": flags = items[2][1:-1].split(",") if "UP" in flags: self.old_up = True