MCPcopy Create free account
hub / github.com/apache/cloudstack / CsVpcGuestNetwork

Class CsVpcGuestNetwork

systemvm/debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py:29–122  ·  view source on GitHub ↗

Manage Vpc Guest Networks

Source from the content-addressed store, hash-verified

27
28
29class CsVpcGuestNetwork(CsDataBag):
30 """ Manage Vpc Guest Networks """
31
32 def process(self):
33 logging.debug("Processing CsVpcGuestNetwork")
34 self.conf = CsFile(RADVD_CONF_NEW)
35 self.conf.empty()
36 for item in self.dbag:
37 if item == "id":
38 continue
39 for address in self.dbag[item]:
40 if address['add']:
41 self.add_address_route(address)
42 self.add_radvd_conf(address)
43 else:
44 self.remove_address_route(address)
45 self.conf.commit()
46 file = CsFile(RADVD_CONF)
47 if not file.compare(self.conf):
48 CsHelper.copy(RADVD_CONF_NEW, RADVD_CONF)
49 logging.debug("CsVpcGuestNetwork:: will restart radvd !")
50 CsHelper.service("radvd", "restart")
51
52 def __disable_dad(self, device):
53 CsHelper.execute("sysctl net.ipv6.conf." + device + ".accept_dad=0")
54 CsHelper.execute("sysctl net.ipv6.conf." + device + ".use_tempaddr=0")
55
56 def add_address_route(self, entry):
57 if 'router_guest_ip6' in list(entry.keys()) and entry['router_guest_ip6']:
58 self.enable_ipv6(entry['device'])
59 cidr_size = entry['router_guest_ip6_cidr'].split("/")[-1]
60 full_addr = entry['router_guest_ip6_gateway'] + "/" + cidr_size
61 if entry['router_guest_ip6'] != entry['router_guest_ip6_gateway']:
62 full_addr = entry['router_guest_ip6'] + "/" + cidr_size
63 if not CsHelper.execute("ip -6 addr show dev %s | grep -w %s" % (entry['device'], full_addr)):
64 CsHelper.execute("ip -6 addr add %s dev %s" % (full_addr, entry['device']))
65 if 'router_ip6' in list(entry.keys()) and entry['router_ip6']:
66 self.__disable_dad(VPC_PUBLIC_INTERFACE)
67 full_public_addr = entry['router_ip6'] + "/" + cidr_size
68 if not CsHelper.execute("ip -6 addr show dev %s | grep -w %s" % (VPC_PUBLIC_INTERFACE, full_public_addr)):
69 CsHelper.execute("ip -6 addr add %s dev %s" % (full_public_addr, VPC_PUBLIC_INTERFACE))
70 if not CsHelper.execute("ip -6 route list default via %s" % entry['router_ip6_gateway']):
71 CsHelper.execute("ip -6 route add default via %s" % entry['router_ip6_gateway'])
72 else:
73 return
74
75 def remove_address_route(self, entry):
76 if 'router_guest_ip6' in list(entry.keys()) and entry['router_guest_ip6']:
77 cidr_size = entry['router_guest_ip6_cidr'].split("/")[-1]
78 full_addr = entry['router_guest_ip6_gateway'] + "/" + cidr_size
79 if entry['router_guest_ip6'] != entry['router_guest_ip6_gateway']:
80 full_addr = entry['router_guest_ip6'] + "/" + cidr_size
81 CsHelper.execute("ip -6 addr del %s dev %s" % (full_addr, entry['device']))
82 if 'router_ip6' in list(entry.keys()) and entry['router_ip6']:
83 full_public_addr = entry['router_ip6'] + "/" + cidr_size
84 CsHelper.execute("ip -6 addr del %s dev %s" % (full_public_addr, VPC_PUBLIC_INTERFACE))
85 else:
86 return

Callers 1

mainFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected