示例#1
0
    def update_network(self, network, original=None):
        if original:
            name = self._get_net_name(original)
        else:
            name = self._get_net_name(network)
        blocked = not network['admin_state_up']
        try:
            pg_ref = self._get_pg_by_name(name)
            pg_config_info = self._get_config_by_ref(pg_ref)

            if (pg_config_info.defaultPortConfig.blocked.value != blocked or
                    (original and original['name'] != network['name'])):
                # we upgrade only defaultPortConfig, because it is inherited
                # by all ports in PortGroup, unless they are explicite
                # overwritten on specific port.
                pg_spec = self._build_pg_update_spec(
                    pg_config_info.configVersion,
                    blocked=blocked)
                pg_spec.name = self._get_net_name(network)
                pg_update_task = self.connection.invoke_api(
                    self.connection.vim,
                    'ReconfigureDVPortgroup_Task',
                    pg_ref, spec=pg_spec)

                self.connection.wait_for_task(pg_update_task)
                LOG.info(_LI('Network %(name)s updated'), {'name': name})
        except vmware_exceptions.VimException as e:
            raise exceptions.wrap_wmvare_vim_exception(e)
示例#2
0
 def __init__(self, dvs_name, connection):
     self.connection = connection
     try:
         self._datacenter = self._get_datacenter(connection)
         self._dvs = self._get_dvs(dvs_name, connection, self._datacenter)
     except vmware_exceptions.VimException as e:
         raise exceptions.wrap_wmvare_vim_exception(e)
示例#3
0
 def delete_network(self, network):
     name = self._get_net_name(network)
     try:
         pg_ref = self._get_pg_by_name(name)
         pg_delete_task = self.connection.invoke_api(
             self.connection.vim,
             'Destroy_Task',
             pg_ref)
         self.connection.wait_for_task(pg_delete_task)
         LOG.info(_LI('Network %(name)s deleted.') % {'name': name})
     except exceptions.PortGroupNotFound:
         LOG.debug('Network %s not present in vcenter.' % name)
     except vmware_exceptions.VimException as e:
         raise exceptions.wrap_wmvare_vim_exception(e)
示例#4
0
 def get_unbound_port_key(self, network, bound_ports):
     """
     returns first empty port in portgroup
     If there is now empty port, than we double ports number in portgroup
     """
     try:
         net_name = self._get_net_name(network)
         pg = self._get_pg_by_name(net_name)
         try:
             return self._lookup_unbound_port(pg, bound_ports)
         except exceptions.UnboundPortNotFound:
             self._increase_ports_on_portgroup(pg)
             return self._lookup_unbound_port(pg, bound_ports)
     except vmware_exceptions.VimException as e:
         raise exceptions.wrap_wmvare_vim_exception(e)
示例#5
0
    def create_network(self, network, segment):
        name = self._get_net_name(network)
        blocked = not network['admin_state_up']

        try:
            pg_spec = self._build_pg_create_spec(
                name,
                segment['segmentation_id'],
                blocked)
            pg_create_task = self.connection.invoke_api(
                self.connection.vim,
                'CreateDVPortgroup_Task',
                self._dvs, spec=pg_spec)

            result = self.connection.wait_for_task(pg_create_task)
        except vmware_exceptions.VimException as e:
            raise exceptions.wrap_wmvare_vim_exception(e)
        else:
            pg = result.result
            LOG.info(_LI('Network %(name)s created \n%(pg_ref)s'),
                     {'name': name, 'pg_ref': pg})
示例#6
0
 def update_port_rules(self, ports):
     try:
         builder = SpecBuilder(self.connection.vim.client.factory)
         port_config_list = []
         for port in ports:
             port_key = port['binding:vif_details']['dvs_port_key']
             port_info = self._get_port_info(port_key)
             port_config = builder.port_config(
                 str(port_key),
                 port['security_group_rules']
             )
             port_config.configVersion = port_info['config'][
                 'configVersion']
             port_config_list.append(port_config)
         task = self.connection.invoke_api(
             self.connection.vim,
             'ReconfigureDVPort_Task',
             self._dvs, port=port_config_list
         )
         return self.connection.wait_for_task(task)
     except vmware_exceptions.VimException as e:
         raise exceptions.wrap_wmvare_vim_exception(e)
示例#7
0
 def delete_network(self, network):
     name = self._get_net_name(network)
     while True:
         try:
             pg_ref = self._get_pg_by_name(name)
             pg_delete_task = self.connection.invoke_api(
                 self.connection.vim,
                 'Destroy_Task',
                 pg_ref)
             self.connection.wait_for_task(pg_delete_task)
             LOG.info(_LI('Network %(name)s deleted.') % {'name': name})
             break
         except exceptions.PortGroupNotFound:
             LOG.debug('Network %s not present in vcenter.' % name)
             break
         except vmware_exceptions.VimException as e:
             raise exceptions.wrap_wmvare_vim_exception(e)
         except vmware_exceptions.VMwareDriverException as e:
             if DELETED_TEXT in e.message:
                 sleep(1)
             else:
                 raise
示例#8
0
    def book_port(self, network):
        try:
            net_name = self._get_net_name(network)
            pg = self._get_pg_by_name(net_name)
            while True:
                try:
                    port_info = self._lookup_unbound_port(pg)
                    break
                except exceptions.UnboundPortNotFound:
                    self._increase_ports_on_portgroup(pg)

            builder = SpecBuilder(self.connection.vim.client.factory)
            port_settings = builder.port_setting()
            port_settings.blocked = builder.blocked(False)
            update_spec = builder.port_config_spec(
                port_info.config.configVersion, port_settings, name='bound')
            update_spec.key = port_info.key
            update_task = self.connection.invoke_api(
                self.connection.vim, 'ReconfigureDVPort_Task',
                self._dvs, port=[update_spec])
            self.connection.wait_for_task(update_task)
            return port_info.key
        except vmware_exceptions.VimException as e:
            raise exceptions.wrap_wmvare_vim_exception(e)