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)
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)
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)
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)
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})
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)
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
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)