コード例 #1
0
 def _populate_vcns_router_binding(self, bindings):
     for binding in bindings:
         nsxv_db.init_edge_vnic_binding(self.ctx.session,
                                        binding['edge_id'])
         nsxv_db.add_nsxv_router_binding(
             self.ctx.session, binding['router_id'],
             binding['edge_id'], None, binding['status'],
             appliance_size=binding['appliance_size'],
             edge_type=binding['edge_type'])
コード例 #2
0
 def _populate_vcns_router_binding(self, bindings):
     for binding in bindings:
         nsxv_db.init_edge_vnic_binding(self.ctx.session,
                                        binding['edge_id'])
         nsxv_db.add_nsxv_router_binding(
             self.ctx.session, binding['router_id'],
             binding['edge_id'], None, binding['status'],
             appliance_size=binding['appliance_size'],
             edge_type=binding['edge_type'],
             availability_zone=binding['availability_zone'])
コード例 #3
0
    def deploy_edge(self,
                    context,
                    router_id,
                    name,
                    internal_network,
                    dist=False,
                    loadbalancer_enable=True,
                    appliance_size=nsxv_constants.LARGE,
                    availability_zone=None):

        edge_name = name
        edge = self._assemble_edge(
            edge_name,
            datacenter_moid=self.datacenter_moid,
            deployment_container_id=self.deployment_container_id,
            appliance_size=appliance_size,
            remote_access=False,
            dist=dist,
            edge_ha=availability_zone.edge_ha)
        appliances = self._assemble_edge_appliances(availability_zone)
        if appliances:
            edge['appliances']['appliances'] = appliances

        if not dist:
            vnic_external = self._assemble_edge_vnic(
                constants.EXTERNAL_VNIC_NAME,
                constants.EXTERNAL_VNIC_INDEX,
                self.external_network,
                type="uplink")
            edge['vnics']['vnics'].append(vnic_external)
        else:
            edge['mgmtInterface'] = {
                'connectedToId': self.external_network,
                'name': "mgmtInterface"
            }
        if internal_network:
            vnic_inside = self._assemble_edge_vnic(
                constants.INTERNAL_VNIC_NAME,
                constants.INTERNAL_VNIC_INDEX,
                internal_network,
                constants.INTEGRATION_EDGE_IPADDRESS,
                constants.INTEGRATION_SUBNET_NETMASK,
                type="internal")
            edge['vnics']['vnics'].append(vnic_inside)

        # If default login credentials for Edge are set, configure accordingly
        if (cfg.CONF.nsxv.edge_appliance_user
                and cfg.CONF.nsxv.edge_appliance_password):
            edge['cliSettings'].update({
                'userName':
                cfg.CONF.nsxv.edge_appliance_user,
                'password':
                cfg.CONF.nsxv.edge_appliance_password
            })

        if not dist and loadbalancer_enable:
            self._enable_loadbalancer(edge)

        edge_id = None
        try:
            header = self.vcns.deploy_edge(edge)[0]
            edge_id = header.get('location', '/').split('/')[-1]

            if edge_id:
                nsxv_db.update_nsxv_router_binding(context.session,
                                                   router_id,
                                                   edge_id=edge_id)
                if not dist:
                    # Init Edge vnic binding
                    nsxv_db.init_edge_vnic_binding(context.session, edge_id)
            else:
                if router_id:
                    nsxv_db.update_nsxv_router_binding(
                        context.session, router_id, status=plugin_const.ERROR)
                error = _('Failed to deploy edge')
                raise nsxv_exc.NsxPluginException(err_msg=error)

            self.callbacks.complete_edge_creation(context, edge_id, name,
                                                  router_id, dist, True)

        except exceptions.VcnsApiException:
            self.callbacks.complete_edge_creation(context, edge_id, name,
                                                  router_id, dist, False)
            with excutils.save_and_reraise_exception():
                LOG.exception(_LE("NSXv: deploy edge failed."))
        return edge_id
コード例 #4
0
    def deploy_edge(self, context, router_id, name, internal_network,
                    dist=False, loadbalancer_enable=True,
                    appliance_size=nsxv_constants.LARGE,
                    availability_zone=None, deploy_metadata=False):

        edge_name = name
        edge = self._assemble_edge(
            edge_name, datacenter_moid=availability_zone.datacenter_moid,
            deployment_container_id=self.deployment_container_id,
            appliance_size=appliance_size, remote_access=False, dist=dist,
            edge_ha=availability_zone.edge_ha)
        appliances = self._assemble_edge_appliances(availability_zone)
        if appliances:
            edge['appliances']['appliances'] = appliances

        if not dist:
            vnic_external = self._assemble_edge_vnic(
                constants.EXTERNAL_VNIC_NAME, constants.EXTERNAL_VNIC_INDEX,
                availability_zone.external_network, type="uplink")
            edge['vnics']['vnics'].append(vnic_external)
        else:
            edge['mgmtInterface'] = {
                'connectedToId': availability_zone.external_network,
                'name': "mgmtInterface"}
        if internal_network:
            vnic_inside = self._assemble_edge_vnic(
                constants.INTERNAL_VNIC_NAME, constants.INTERNAL_VNIC_INDEX,
                internal_network,
                edge_utils.get_vdr_transit_network_plr_address(),
                edge_utils.get_vdr_transit_network_netmask(),
                type="internal")
            edge['vnics']['vnics'].append(vnic_inside)

        # If default login credentials for Edge are set, configure accordingly
        if (cfg.CONF.nsxv.edge_appliance_user and
            cfg.CONF.nsxv.edge_appliance_password):
            edge['cliSettings'].update({
                'userName': cfg.CONF.nsxv.edge_appliance_user,
                'password': cfg.CONF.nsxv.edge_appliance_password})

        if not dist and loadbalancer_enable:
            self._enable_loadbalancer(edge)

        edge_id = None
        try:
            header = self.vcns.deploy_edge(edge)[0]
            edge_id = header.get('location', '/').split('/')[-1]

            if edge_id:
                nsxv_db.update_nsxv_router_binding(
                    context.session, router_id, edge_id=edge_id)
                if not dist:
                    # Init Edge vnic binding
                    nsxv_db.init_edge_vnic_binding(
                        context.session, edge_id)
            else:
                if router_id:
                    nsxv_db.update_nsxv_router_binding(
                        context.session, router_id,
                        status=lib_const.ERROR)
                error = _('Failed to deploy edge')
                raise nsxv_exc.NsxPluginException(err_msg=error)

            self.callbacks.complete_edge_creation(
                context, edge_id, name, router_id, dist, True,
                availability_zone=availability_zone,
                deploy_metadata=deploy_metadata)

        except exceptions.VcnsApiException:
            self.callbacks.complete_edge_creation(
                context, edge_id, name, router_id, dist, False,
                availability_zone=availability_zone)
            with excutils.save_and_reraise_exception():
                LOG.exception("NSXv: deploy edge failed.")
        return edge_id