Manage Vpc Guest Networks
| 27 | |
| 28 | |
| 29 | class 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 |