def _port_add_iface_route_table(self, route_prefix_list, vmi_obj,
                                    subnet_id):
        project_obj = self._project_read(proj_id=vmi_obj.parent_uuid)
        intf_rt_name = '%s_%s_%s' % (_IFACE_ROUTE_TABLE_NAME_PREFIX, subnet_id,
                                     vmi_obj.uuid)
        intf_rt_fq_name = list(project_obj.get_fq_name())
        intf_rt_fq_name.append(intf_rt_name)

        try:
            intf_route_table_obj = self._vnc_lib.interface_route_table_read(
                fq_name=intf_rt_fq_name)
        except vnc_exc.NoIdError:
            route_table = vnc_api.RouteTableType(intf_rt_name)
            route_table.set_route([])
            intf_route_table = vnc_api.InterfaceRouteTable(
                interface_route_table_routes=route_table,
                parent_obj=project_obj,
                name=intf_rt_name)

            intf_route_table_id = self._vnc_lib.interface_route_table_create(
                intf_route_table)
            intf_route_table_obj = self._vnc_lib.interface_route_table_read(
                id=intf_route_table_id)

        rt_routes = intf_route_table_obj.get_interface_route_table_routes()
        routes = rt_routes.get_route()
        # delete any old routes
        routes = []
        for prefix in route_prefix_list:
            routes.append(vnc_api.RouteType(prefix=prefix))
        rt_routes.set_route(routes)
        intf_route_table_obj.set_interface_route_table_routes(rt_routes)
        self._vnc_lib.interface_route_table_update(intf_route_table_obj)
        vmi_obj.add_interface_route_table(intf_route_table_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi_obj)
Beispiel #2
0
    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
Beispiel #3
0
 def _build_subnet_host_routes(self, subnet_q, cidr_version):
     host_routes = []
     if subnet_q.get('host_routes') is not None:
         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']))
     return host_routes
Beispiel #4
0
    def sync_routes(self, vn_obj, subnet_id, subnet_cidr, host_routes):
        if not host_routes:
            self.delete_rt(vn_obj, subnet_id)
            return

        host_prefixes = self.get_host_prefixes(host_routes,
                                               subnet_cidr)
        rt_obj = self.get_or_create_rt(vn_obj, subnet_id)
        routes = []
        for next_hop, prefixes in host_prefixes.items():
            for prefix in prefixes:
                routes.append(vnc_api.RouteType(prefix=prefix, next_hop=next_hop,
                                                next_hop_type="ip-address"))
        rt_obj.set_routes(vnc_api.RouteTableType.factory(routes))
        self._vnc_lib.route_table_update(rt_obj)
    def handle_update(self, json_snippet, tmpl_diff, prop_diff):
        try:
            rt_obj = self.vnc_lib().interface_route_table_read(
                id=self.resource_id)
        except vnc_api.NoIdError:
            LOG.warn(_("Route table %s not found.") % self.name)
            raise
        except Exception as e:
            LOG.warn(_("Unknown error %s.") % str(e))
            raise

        route_table = vnc_api.RouteTableType()
        for route in prop_diff.get(self.ROUTES):
            route_table.add_route(vnc_api.RouteType(prefix=route))
        rt_obj.set_interface_route_table_routes(route_table)
        self.vnc_lib().interface_route_table_update(rt_obj)
    def handle_create(self):
        tenant_id = self.stack.context.tenant_id
        project_obj = self.vnc_lib().project_read(id=str(uuid.UUID(tenant_id)))
        try:
            si_obj = self.vnc_lib().service_instance_read(
                id=self.properties[self.SERVICE_INSTANCE])
        except vnc_api.NoIdError:
            si_name = project_obj.fq_name + \
                [self.properties[self.SERVICE_INSTANCE]]
            si_obj = self.vnc_lib().service_instance_read(fq_name=si_name)

        route_table = vnc_api.RouteTableType()
        for route in self.properties[self.ROUTES]:
            route_table.add_route(vnc_api.RouteType(prefix=route))
        rt_obj = vnc_api.InterfaceRouteTable(
            name=self.properties[self.NAME],
            parent_obj=project_obj,
            interface_route_table_routes=route_table)
        rt_obj.set_service_instance(
            si_obj,
            vnc_api.ServiceInterfaceTag(
                self.properties[self.SERVICE_PORT_TAG]))
        rt_uuid = self.vnc_lib().interface_route_table_create(rt_obj)
        self.resource_id_set(rt_uuid)
Beispiel #7
0
    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().route_table_read(id=self.resource_id)
        except:
            raise Exception(_('route-table %s not found.') % self.name)

        if prop_diff.get(self.ROUTES) is not None:
            obj_1 = vnc_api.RouteTableType()
            if prop_diff.get(self.ROUTES,
                             {}).get(self.ROUTES_ROUTE) is not None:
                for index_1 in range(
                        len(
                            prop_diff.get(self.ROUTES,
                                          {}).get(self.ROUTES_ROUTE))):
                    obj_2 = vnc_api.RouteType()
                    if prop_diff.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE,
                        {})[index_1].get(self.ROUTES_ROUTE_PREFIX) is not None:
                        obj_2.set_prefix(
                            prop_diff.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE,
                                {})[index_1].get(self.ROUTES_ROUTE_PREFIX))
                    if prop_diff.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE, {})[index_1].get(
                                self.ROUTES_ROUTE_NEXT_HOP) is not None:
                        obj_2.set_next_hop(
                            prop_diff.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE,
                                {})[index_1].get(self.ROUTES_ROUTE_NEXT_HOP))
                    if prop_diff.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE, {})[index_1].get(
                                self.ROUTES_ROUTE_NEXT_HOP_TYPE) is not None:
                        obj_2.set_next_hop_type(
                            prop_diff.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE, {})[index_1].get(
                                    self.ROUTES_ROUTE_NEXT_HOP_TYPE))
                    if prop_diff.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE,
                        {})[index_1].get(self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES
                                         ) is not None:
                        obj_3 = vnc_api.CommunityAttributes()
                        if prop_diff.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE, {}
                        )[index_1].get(
                                self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}
                        ).get(self.
                              ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                              ) is not None:
                            for index_3 in range(
                                    len(
                                        prop_diff.get(self.ROUTES, {}).get(
                                            self.ROUTES_ROUTE, {})
                                        [index_1].get(
                                            self.
                                            ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                            {}).
                                        get(self.
                                            ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                            ))):
                                obj_3.add_community_attribute(
                                    prop_diff.get(self.ROUTES, {}).get(
                                        self.ROUTES_ROUTE, {})
                                    [index_1].get(
                                        self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                        {}).
                                    get(self.
                                        ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                        )[index_3])
                        obj_2.set_community_attributes(obj_3)
                    obj_1.add_route(obj_2)
            obj_0.set_routes(obj_1)
        if prop_diff.get(self.DISPLAY_NAME) is not None:
            obj_0.set_display_name(prop_diff.get(self.DISPLAY_NAME))

        try:
            self.vnc_lib().route_table_update(obj_0)
        except:
            raise Exception(
                _('route-table %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.RouteTable(name=self.properties[self.NAME],
                                   parent_obj=parent_obj)

        if self.properties.get(self.ROUTES) is not None:
            obj_1 = vnc_api.RouteTableType()
            if self.properties.get(self.ROUTES,
                                   {}).get(self.ROUTES_ROUTE) is not None:
                for index_1 in range(
                        len(
                            self.properties.get(self.ROUTES,
                                                {}).get(self.ROUTES_ROUTE))):
                    obj_2 = vnc_api.RouteType()
                    if self.properties.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE,
                        {})[index_1].get(self.ROUTES_ROUTE_PREFIX) is not None:
                        obj_2.set_prefix(
                            self.properties.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE,
                                {})[index_1].get(self.ROUTES_ROUTE_PREFIX))
                    if self.properties.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE, {})[index_1].get(
                                self.ROUTES_ROUTE_NEXT_HOP) is not None:
                        obj_2.set_next_hop(
                            self.properties.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE,
                                {})[index_1].get(self.ROUTES_ROUTE_NEXT_HOP))
                    if self.properties.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE, {})[index_1].get(
                                self.ROUTES_ROUTE_NEXT_HOP_TYPE) is not None:
                        obj_2.set_next_hop_type(
                            self.properties.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE, {})[index_1].get(
                                    self.ROUTES_ROUTE_NEXT_HOP_TYPE))
                    if self.properties.get(self.ROUTES, {}).get(
                            self.ROUTES_ROUTE,
                        {})[index_1].get(self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES
                                         ) is not None:
                        obj_3 = vnc_api.CommunityAttributes()
                        if self.properties.get(self.ROUTES, {}).get(
                                self.ROUTES_ROUTE, {}
                        )[index_1].get(
                                self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES, {}
                        ).get(self.
                              ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                              ) is not None:
                            for index_3 in range(
                                    len(
                                        self.properties.get(
                                            self.ROUTES,
                                            {}).get(self.ROUTES_ROUTE, {})
                                        [index_1].get(
                                            self.
                                            ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                            {}).
                                        get(self.
                                            ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                            ))):
                                obj_3.add_community_attribute(
                                    self.properties.get(self.ROUTES, {}).get(
                                        self.ROUTES_ROUTE, {})
                                    [index_1].get(
                                        self.ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                        {}).
                                    get(self.
                                        ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                        )[index_3])
                        obj_2.set_community_attributes(obj_3)
                    obj_1.add_route(obj_2)
            obj_0.set_routes(obj_1)
        if self.properties.get(self.DISPLAY_NAME) is not None:
            obj_0.set_display_name(self.properties.get(self.DISPLAY_NAME))

        try:
            obj_uuid = super(ContrailRouteTable, self).resource_create(obj_0)
        except:
            raise Exception(
                _('route-table %s could not be updated.') % self.name)

        self.resource_id_set(obj_uuid)
    def handle_update(self, json_snippet, tmpl_diff, prop_diff):
        try:
            obj_0 = self.vnc_lib().interface_route_table_read(
                id=self.resource_id)
        except:
            raise Exception(
                _('interface-route-table %s not found.') % self.name)

        if prop_diff.get(self.DISPLAY_NAME) is not None:
            obj_0.set_display_name(prop_diff.get(self.DISPLAY_NAME))
        if prop_diff.get(self.INTERFACE_ROUTE_TABLE_ROUTES) is not None:
            obj_1 = vnc_api.RouteTableType()
            if prop_diff.get(self.INTERFACE_ROUTE_TABLE_ROUTES, {}).get(
                    self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE) is not None:
                for index_1 in range(
                        len(
                            prop_diff.get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES, {}).get(
                                    self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE))):
                    obj_2 = vnc_api.RouteType()
                    if prop_diff.get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES,
                        {}).get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                            {})[index_1].get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_PREFIX
                            ) is not None:
                        obj_2.set_prefix(
                            prop_diff.get(self.INTERFACE_ROUTE_TABLE_ROUTES,
                                          {}).
                            get(self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                                {})[index_1].get(
                                    self.
                                    INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_PREFIX))
                    if prop_diff.get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES, {}
                    ).get(self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                          {})[index_1].get(
                              self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_NEXT_HOP
                          ) is not None:
                        obj_2.set_next_hop(
                            prop_diff.get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES, {}).get(
                                    self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                                    {})
                            [index_1].get(
                                self.
                                INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_NEXT_HOP))
                    if prop_diff.get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES, {}
                    ).get(self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                          {})[index_1].get(
                              self.
                              INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_NEXT_HOP_TYPE
                          ) is not None:
                        obj_2.set_next_hop_type(
                            prop_diff.get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES, {}).get(
                                    self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                                    {})
                            [index_1].get(
                                self.
                                INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_NEXT_HOP_TYPE
                            ))
                    if prop_diff.get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES,
                        {}).get(
                            self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE, {}
                        )[index_1].get(
                            self.
                            INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES
                        ) is not None:
                        obj_3 = vnc_api.CommunityAttributes()
                        if prop_diff.get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES, {}
                        ).get(
                                self.INTERFACE_ROUTE_TABLE_ROUTES_ROUTE, {}
                        )[index_1].get(
                                self.
                                INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                            {}
                        ).get(self.
                              INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                              ) is not None:
                            for index_3 in range(
                                    len(
                                        prop_diff.get(
                                            self.INTERFACE_ROUTE_TABLE_ROUTES,
                                            {}
                                        ).get(
                                            self.
                                            INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                                            {})
                                        [index_1].get(
                                            self.
                                            INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                            {}).
                                        get(self.
                                            INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                            ))):
                                obj_3.add_community_attribute(
                                    prop_diff.get(
                                        self.INTERFACE_ROUTE_TABLE_ROUTES,
                                        {}).get(
                                            self.
                                            INTERFACE_ROUTE_TABLE_ROUTES_ROUTE,
                                            {})
                                    [index_1].get(
                                        self.
                                        INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES,
                                        {}).
                                    get(self.
                                        INTERFACE_ROUTE_TABLE_ROUTES_ROUTE_COMMUNITY_ATTRIBUTES_COMMUNITY_ATTRIBUTE
                                        )[index_3])
                        obj_2.set_community_attributes(obj_3)
                    obj_1.add_route(obj_2)
            obj_0.set_interface_route_table_routes(obj_1)

        # reference to service_instance
        ref_obj_list = []
        ref_data_list = []
        if prop_diff.get(self.SERVICE_INSTANCE_REFS_DATA) is not None:
            for index_0 in range(
                    len(prop_diff.get(self.SERVICE_INSTANCE_REFS_DATA))):
                obj_1 = vnc_api.ServiceInterfaceTag()
                if prop_diff.get(
                        self.SERVICE_INSTANCE_REFS_DATA, {})[index_0].get(
                            self.SERVICE_INSTANCE_REFS_DATA_INTERFACE_TYPE
                        ) is not None:
                    obj_1.set_interface_type(
                        prop_diff.get(self.SERVICE_INSTANCE_REFS_DATA, {})
                        [index_0].get(
                            self.SERVICE_INSTANCE_REFS_DATA_INTERFACE_TYPE))
                ref_data_list.append(obj_1)
        if self.SERVICE_INSTANCE_REFS in prop_diff:
            for index_0 in range(
                    len(prop_diff.get(self.SERVICE_INSTANCE_REFS_DATA) or [])):
                try:
                    ref_obj = self.vnc_lib().service_instance_read(
                        id=prop_diff.get(self.SERVICE_INSTANCE_REFS)[index_0])
                except:
                    ref_obj = self.vnc_lib().service_instance_read(
                        fq_name_str=prop_diff.get(
                            self.SERVICE_INSTANCE_REFS)[index_0])
                ref_obj_list.append(ref_obj.fq_name)

            obj_0.set_service_instance_list(ref_obj_list, ref_data_list)
            # End: reference to service_instance_refs

        try:
            self.vnc_lib().interface_route_table_update(obj_0)
        except:
            raise Exception(
                _('interface-route-table %s could not be updated.') %
                self.name)
Beispiel #11
0
    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)
Beispiel #12
0
    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)