def _subnet_update(self, subnet_q, subnet_id, vn_obj, subnet_vnc, ipam_ref, apply_subnet_host_routes=False): subnet_cidr = '%s/%s' % (subnet_vnc.subnet.get_ip_prefix(), subnet_vnc.subnet.get_ip_prefix_len()) cidr_version = netaddr.IPNetwork(subnet_cidr).version if subnet_q.get('name') is not None: subnet_vnc.set_subnet_name(subnet_q['name']) if subnet_q.get('gateway_ip') is not None: subnet_vnc.set_default_gateway(subnet_q['gateway_ip']) if subnet_q.get('enable_dhcp') is not None: subnet_vnc.set_enable_dhcp(subnet_q['enable_dhcp']) if subnet_q.get('dns_nameservers') is not None: dhcp_options = [] dns_servers = " ".join(subnet_q['dns_nameservers']) self._check_ip_matches_version(subnet_q['dns_nameservers'], cidr_version) if dns_servers: dhcp_options.append( vnc_api.DhcpOptionType(dhcp_option_name='6', dhcp_option_value=dns_servers)) if dhcp_options: subnet_vnc.set_dhcp_option_list( vnc_api.DhcpOptionsListType(dhcp_options)) else: subnet_vnc.set_dhcp_option_list(None) if subnet_q.get('host_routes') is not None: host_routes = [] for host_route in subnet_q['host_routes']: self._check_ip_matches_version( [host_route['destination'], host_route['nexthop']], cidr_version) host_routes.append( vnc_api.RouteType(prefix=host_route['destination'], next_hop=host_route['nexthop'])) if apply_subnet_host_routes: subnet_hr_handler = SubnetHostRoutesHandler(self._vnc_lib) subnet_hr_handler.sync_routes(vn_obj, subnet_id, subnet_cidr, host_routes) if host_routes: subnet_vnc.set_host_routes(vnc_api.RouteTableType(host_routes)) else: subnet_vnc.set_host_routes(None) vn_obj._pending_field_updates.add('network_ipam_refs') self._resource_update(vn_obj) ret_subnet_q = self._subnet_vnc_to_neutron(subnet_vnc, vn_obj, ipam_ref['to']) return ret_subnet_q
def _set_vmi_extra_dhcp_options(self, vmi_obj, extra_dhcp_options): dhcp_options = [] for option_pair in extra_dhcp_options or []: option = vnc_api.DhcpOptionType( dhcp_option_name=option_pair['opt_name'], dhcp_option_value=option_pair['opt_value']) dhcp_options.append(option) if dhcp_options: olist = vnc_api.DhcpOptionsListType(dhcp_options) vmi_obj.set_virtual_machine_interface_dhcp_option_list(olist) else: vmi_obj.set_virtual_machine_interface_dhcp_option_list(None)
def _subnet_update(self, subnet_q, subnet_id, vn_obj, subnet_vnc, ipam_ref, apply_subnet_host_routes=False): subnet_cidr = '%s/%s' % (subnet_vnc.subnet.get_ip_prefix(), subnet_vnc.subnet.get_ip_prefix_len()) cidr_version = netaddr.IPNetwork(subnet_cidr).version if subnet_q.get('name') is not None: subnet_vnc.set_subnet_name(subnet_q['name']) if subnet_q.get('gateway_ip') is not None: subnet_vnc.set_default_gateway(subnet_q['gateway_ip']) if subnet_q.get('enable_dhcp') is not None: subnet_vnc.set_enable_dhcp(subnet_q['enable_dhcp']) if subnet_q.get('dns_nameservers') is not None: dhcp_options = [] dns_servers = " ".join(subnet_q['dns_nameservers']) self._check_ip_matches_version(subnet_q['dns_nameservers'], cidr_version) if dns_servers: dhcp_options.append( vnc_api.DhcpOptionType(dhcp_option_name='6', dhcp_option_value=dns_servers)) if dhcp_options: subnet_vnc.set_dhcp_option_list( vnc_api.DhcpOptionsListType(dhcp_options)) else: subnet_vnc.set_dhcp_option_list(None) self._apply_subnet_host_routes(subnet_q, subnet_vnc, subnet_cidr, cidr_version, vn_obj) vn_obj._pending_field_updates.add('network_ipam_refs') self._resource_update(vn_obj) ret_subnet_q = self._subnet_vnc_to_neutron(subnet_vnc, vn_obj, ipam_ref['to']) return ret_subnet_q
def _subnet_neutron_to_vnc(subnet_q): if not subnet_q.get('cidr'): ContrailResourceHandler._raise_contrail_exception( 'BadRequest', msg='cidr is empty', resource='subnet') cidr = netaddr.IPNetwork(subnet_q['cidr']) pfx = str(cidr.network) pfx_len = int(cidr.prefixlen) if pfx_len == 0 and cidr.version == 4: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg="Invalid prefix len") if cidr.version != 4 and cidr.version != 6: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg='Unknown IP family') elif cidr.version != int(subnet_q['ip_version']): msg = ("cidr '%s' does not match the ip_version '%s'" % (subnet_q['cidr'], subnet_q['ip_version'])) ContrailResourceHandler._raise_contrail_exception( 'InvalidInput', error_message=msg, resource='subnet') if 'gateway_ip' in subnet_q: default_gw = subnet_q['gateway_ip'] gw_ip_obj = netaddr.IPAddress(default_gw) if default_gw != '0.0.0.0': if gw_ip_obj not in cidr or gw_ip_obj.words[-1] == 255 or ( gw_ip_obj.words[-1] == 0): ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg="Invalid Gateway ip address") else: # Assigned first+1 from cidr default_gw = str(netaddr.IPAddress(cidr.first + 1)) if cidr.version == 4 and 'ipv6_address_mode' in subnet_q: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg="Invalid address mode with version") if 'allocation_pools' in subnet_q: alloc_pools = subnet_q['allocation_pools'] alloc_cidrs = [] for pool in alloc_pools: try: ip_start = netaddr.IPAddress(pool['start']) ip_end = netaddr.IPAddress(pool['end']) except netaddr.core.AddrFormatError: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg="Invalid IP address in allocation pool") if ip_start >= ip_end: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg='Invalid address in allocation pool') if ip_start not in cidr or ip_end not in cidr: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg="Pool addresses not in subnet range") # Check if the pool overlaps with other pools for rng in alloc_cidrs: if rng['start'] <= ip_start and ip_end <= rng['end']: ContrailResourceHandler._raise_contrail_exception( 'BadRequest', resource='subnet', msg='Pool addresses invalid') elif (rng['start'] >= ip_start and (rng['start'] <= ip_end)) or ( rng['end'] >= ip_start and (rng['end'] <= ip_end)): ContrailResourceHandler._raise_contrail_exception( 'OverlappingAllocationPools', pool_2="%s-%s" % (ip_start, ip_end), pool_1="%s-%s" % (rng['start'], rng['end']), subnet_cidr=str(cidr)) alloc_cidrs.append({'start': ip_start, 'end': ip_end}) gw_ip_obj = netaddr.IPAddress(default_gw) for rng in alloc_cidrs: st = rng['start'] end = rng['end'] if st <= gw_ip_obj and end >= gw_ip_obj: ContrailResourceHandler._raise_contrail_exception( 'GatewayConflictWithAllocationPools', ip_address=default_gw, pool=str(cidr), msg='Gw ip is part of allocation pools') else: # Assigned by address manager alloc_pools = None dhcp_option_list = None if 'dns_nameservers' in subnet_q and subnet_q['dns_nameservers']: dhcp_options = [] dns_servers = " ".join(subnet_q['dns_nameservers']) if dns_servers: dhcp_options.append( vnc_api.DhcpOptionType(dhcp_option_name='6', dhcp_option_value=dns_servers)) if dhcp_options: dhcp_option_list = vnc_api.DhcpOptionsListType(dhcp_options) host_route_list = None if 'host_routes' in subnet_q and subnet_q['host_routes']: host_routes = [] for host_route in subnet_q['host_routes']: SubnetMixin._check_ip_matches_version( [host_route['destination'], host_route['nexthop']], cidr.version) host_routes.append( vnc_api.RouteType(prefix=host_route['destination'], next_hop=host_route['nexthop'])) if host_routes: host_route_list = vnc_api.RouteTableType(host_routes) if 'enable_dhcp' in subnet_q: dhcp_config = subnet_q['enable_dhcp'] else: dhcp_config = None sn_name = subnet_q.get('name') subnet_vnc = vnc_api.IpamSubnetType(subnet=vnc_api.SubnetType( pfx, pfx_len), default_gateway=default_gw, enable_dhcp=dhcp_config, dns_nameservers=None, allocation_pools=alloc_pools, addr_from_start=True, dhcp_option_list=dhcp_option_list, host_routes=host_route_list, subnet_name=sn_name, subnet_uuid=str(uuid.uuid4())) return subnet_vnc
def handle_update(self, json_snippet, tmpl_diff, prop_diff): try: obj_0 = self.vnc_lib().network_ipam_read( id=self.resource_id ) except: raise Exception(_('network-ipam %s not found.') % self.name) if prop_diff.get(self.NETWORK_IPAM_MGMT) is not None: obj_1 = vnc_api.IpamType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_METHOD) is not None: obj_1.set_ipam_method(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_METHOD)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_METHOD) is not None: obj_1.set_ipam_dns_method(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_METHOD)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER) is not None: obj_2 = vnc_api.IpamDnsAddressType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS) is not None: obj_3 = vnc_api.IpAddressesType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS) is not None: for index_3 in range(len(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS))): obj_3.add_ip_address(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS)[index_3]) obj_2.set_tenant_dns_server_address(obj_3) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_VIRTUAL_DNS_SERVER_NAME) is not None: obj_2.set_virtual_dns_server_name(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_VIRTUAL_DNS_SERVER_NAME)) obj_1.set_ipam_dns_server(obj_2) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST) is not None: obj_2 = vnc_api.DhcpOptionsListType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION) is not None: for index_2 in range(len(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION))): obj_3 = vnc_api.DhcpOptionType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_NAME) is not None: obj_3.set_dhcp_option_name(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_NAME)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE) is not None: obj_3.set_dhcp_option_value(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE_BYTES) is not None: obj_3.set_dhcp_option_value_bytes(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE_BYTES)) obj_2.add_dhcp_option(obj_3) obj_1.set_dhcp_option_list(obj_2) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK) is not None: obj_2 = vnc_api.SubnetType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX) is not None: obj_2.set_ip_prefix(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX_LEN) is not None: obj_2.set_ip_prefix_len(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX_LEN)) obj_1.set_cidr_block(obj_2) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES) is not None: obj_2 = vnc_api.RouteTableType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE) is not None: for index_2 in range(len(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE))): obj_3 = vnc_api.RouteType() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_PREFIX) is not None: obj_3.set_prefix(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_PREFIX)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP) is not None: obj_3.set_next_hop(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP_TYPE) is not None: obj_3.set_next_hop_type(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP_TYPE)) if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES) is not None: obj_4 = vnc_api.CommunityAttributes() if prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE) is not None: for index_4 in range(len(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE))): obj_4.add_community_attribute(prop_diff.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE)[index_4]) obj_3.set_community_attributes(obj_4) obj_2.add_route(obj_3) obj_1.set_host_routes(obj_2) obj_0.set_network_ipam_mgmt(obj_1) if prop_diff.get(self.DISPLAY_NAME) is not None: obj_0.set_display_name(prop_diff.get(self.DISPLAY_NAME)) # reference to virtual_DNS_refs ref_obj_list = [] ref_data_list = [] if self.VIRTUAL_DNS_REFS in prop_diff: for index_0 in range(len(prop_diff.get(self.VIRTUAL_DNS_REFS) or [])): try: ref_obj = self.vnc_lib().virtual_DNS_read( id=prop_diff.get(self.VIRTUAL_DNS_REFS)[index_0] ) except: ref_obj = self.vnc_lib().virtual_DNS_read( fq_name_str=prop_diff.get(self.VIRTUAL_DNS_REFS)[index_0] ) ref_obj_list.append(ref_obj.fq_name) obj_0.set_virtual_DNS_list(ref_obj_list) # End: reference to virtual_DNS_refs try: self.vnc_lib().network_ipam_update(obj_0) except: raise Exception(_('network-ipam %s could not be updated.') % self.name)
def handle_create(self): parent_obj = None if parent_obj is None and self.properties.get(self.PROJECT): try: parent_obj = self.vnc_lib().project_read(id=self.properties.get(self.PROJECT)) except vnc_api.NoIdError: parent_obj = self.vnc_lib().project_read(fq_name_str=self.properties.get(self.PROJECT)) except: parent_obj = None if parent_obj is None: tenant_id = self.stack.context.tenant_id parent_obj = self.vnc_lib().project_read(id=str(uuid.UUID(tenant_id))) if parent_obj is None: raise Exception('Error: parent is not specified in template!') obj_0 = vnc_api.NetworkIpam(name=self.properties[self.NAME], parent_obj=parent_obj) if self.properties.get(self.NETWORK_IPAM_MGMT) is not None: obj_1 = vnc_api.IpamType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_METHOD) is not None: obj_1.set_ipam_method(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_METHOD)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_METHOD) is not None: obj_1.set_ipam_dns_method(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_METHOD)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER) is not None: obj_2 = vnc_api.IpamDnsAddressType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS) is not None: obj_3 = vnc_api.IpAddressesType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS) is not None: for index_3 in range(len(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS))): obj_3.add_ip_address(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_TENANT_DNS_SERVER_ADDRESS_IP_ADDRESS)[index_3]) obj_2.set_tenant_dns_server_address(obj_3) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_VIRTUAL_DNS_SERVER_NAME) is not None: obj_2.set_virtual_dns_server_name(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER, {}).get(self.NETWORK_IPAM_MGMT_IPAM_DNS_SERVER_VIRTUAL_DNS_SERVER_NAME)) obj_1.set_ipam_dns_server(obj_2) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST) is not None: obj_2 = vnc_api.DhcpOptionsListType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION) is not None: for index_2 in range(len(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION))): obj_3 = vnc_api.DhcpOptionType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_NAME) is not None: obj_3.set_dhcp_option_name(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_NAME)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE) is not None: obj_3.set_dhcp_option_value(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE_BYTES) is not None: obj_3.set_dhcp_option_value_bytes(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST, {}).get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION, {})[index_2].get(self.NETWORK_IPAM_MGMT_DHCP_OPTION_LIST_DHCP_OPTION_DHCP_OPTION_VALUE_BYTES)) obj_2.add_dhcp_option(obj_3) obj_1.set_dhcp_option_list(obj_2) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK) is not None: obj_2 = vnc_api.SubnetType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX) is not None: obj_2.set_ip_prefix(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX_LEN) is not None: obj_2.set_ip_prefix_len(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK, {}).get(self.NETWORK_IPAM_MGMT_CIDR_BLOCK_IP_PREFIX_LEN)) obj_1.set_cidr_block(obj_2) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES) is not None: obj_2 = vnc_api.RouteTableType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE) is not None: for index_2 in range(len(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE))): obj_3 = vnc_api.RouteType() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_PREFIX) is not None: obj_3.set_prefix(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_PREFIX)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP) is not None: obj_3.set_next_hop(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP_TYPE) is not None: obj_3.set_next_hop_type(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_NEXT_HOP_TYPE)) if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES) is not None: obj_4 = vnc_api.CommunityAttributes() if self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE) is not None: for index_4 in range(len(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE))): obj_4.add_community_attribute(self.properties.get(self.NETWORK_IPAM_MGMT, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE, {})[index_2].get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}).get(self.NETWORK_IPAM_MGMT_HOST_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE)[index_4]) obj_3.set_community_attributes(obj_4) obj_2.add_route(obj_3) obj_1.set_host_routes(obj_2) obj_0.set_network_ipam_mgmt(obj_1) if self.properties.get(self.DISPLAY_NAME) is not None: obj_0.set_display_name(self.properties.get(self.DISPLAY_NAME)) # reference to virtual_DNS_refs if self.properties.get(self.VIRTUAL_DNS_REFS): for index_0 in range(len(self.properties.get(self.VIRTUAL_DNS_REFS))): try: ref_obj = self.vnc_lib().virtual_DNS_read( id=self.properties.get(self.VIRTUAL_DNS_REFS)[index_0] ) except vnc_api.NoIdError: ref_obj = self.vnc_lib().virtual_DNS_read( fq_name_str=self.properties.get(self.VIRTUAL_DNS_REFS)[index_0] ) obj_0.add_virtual_DNS(ref_obj) try: obj_uuid = super(ContrailNetworkIpam, self).resource_create(obj_0) except: raise Exception(_('network-ipam %s could not be updated.') % self.name) self.resource_id_set(obj_uuid)