def list_networks(self): vapp_name = self.params.get('vapp_name') vapp_resource = self.vdc.get_vapp(vapp_name) vapp = VApp(self.client, name=vapp_name, resource=vapp_resource) response = dict() response['msg'] = [] for network in vapp.get_all_networks(): response['msg'].append(network.get('{' + NSMAP['ovf'] + '}name')) return response
def list_networks(self): vapp_name = self.params.get('vapp_name') vapp_resource = self.vdc.get_vapp(vapp_name) vapp = VApp(self.client, name=vapp_name, resource=vapp_resource) response = dict() response['msg'] = [] for network in vapp.get_all_networks(): response['msg'].append(network.get('{'+NSMAP['ovf']+'}name')) return response
class VappNetwork(VcdAnsibleModule): def __init__(self, **kwargs): super(VappNetwork, self).__init__(**kwargs) vapp_resource = self.get_resource() self.vapp = VApp(self.client, resource=vapp_resource) def manage_states(self): state = self.params.get('state') if state == "present": return self.add_network() if state == "absent": return self.delete_network() def get_resource(self): vapp = self.params.get('vapp') vdc = self.params.get('vdc') org_resource = Org(self.client, resource=self.client.get_org()) vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc)) vapp_resource_href = vdc_resource.get_resource_href( name=vapp, entity_type=EntityType.VAPP) vapp_resource = self.client.get_resource(vapp_resource_href) return vapp_resource def get_network(self): network_name = self.params.get('network') networks = self.vapp.get_all_networks() for network in networks: if network.get('{' + NSMAP['ovf'] + '}name') == network_name: return network raise EntityNotFoundException('Can\'t find the specified vApp network') def delete_network(self): network_name = self.params.get('network') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: response['warnings'] = 'Vapp Network {} is not present.'.format( network_name) else: network_config_section = self.vapp.resource.NetworkConfigSection for network_config in network_config_section.NetworkConfig: if network_config.get('networkName') == network_name: network_config_section.remove(network_config) delete_network_task = self.client.put_linked_resource( self.vapp.resource.NetworkConfigSection, RelationType.EDIT, EntityType.NETWORK_CONFIG_SECTION.value, network_config_section) self.execute_task(delete_network_task) response['msg'] = 'Vapp Network {} has been deleted.'.format( network_name) response['changed'] = True return response def add_network(self): network_name = self.params.get('network') fence_mode = self.params.get('fence_mode') parent_network = self.params.get('parent_network') ip_scope = self.params.get('ip_scope') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: network_config_section = self.vapp.resource.NetworkConfigSection config = E.Configuration() if parent_network: vdc = self.params.get('vdc') org_resource = Org(self.client, resource=self.client.get_org()) vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc)) orgvdc_networks = vdc_resource.list_orgvdc_network_resources( parent_network) parent = next((network for network in orgvdc_networks if network.get('name') == parent_network), None) if parent: config.append(E.ParentNetwork(href=parent.get('href'))) else: raise EntityNotFoundException( 'Parent network \'%s\' does not exist'.format( parent_network)) elif ip_scope: scope = E.IpScope( E.IsInherited('false'), E.Gateway( str( ip_network(ip_scope, strict=False).network_address + 1)), E.Netmask(str(ip_network(ip_scope, strict=False).netmask))) config.append(E.IpScopes(scope)) else: raise VappNetworkCreateError( 'Either parent_network or ip_scope must be set') config.append(E.FenceMode(fence_mode)) network_config = E.NetworkConfig(config, networkName=network_name) network_config_section.append(network_config) add_network_task = self.client.put_linked_resource( self.vapp.resource.NetworkConfigSection, RelationType.EDIT, EntityType.NETWORK_CONFIG_SECTION.value, network_config_section) self.execute_task(add_network_task) response['msg'] = 'Vapp Network {} has been added'.format( network_name) response['changed'] = True else: response[ 'warnings'] = 'Vapp Network {} is already present.'.format( network_name) return response
class VappNetwork(VcdAnsibleModule): def __init__(self, **kwargs): super(VappNetwork, self).__init__(**kwargs) vapp_resource = self.get_resource() self.vapp = VApp(self.client, resource=vapp_resource) def manage_states(self): state = self.params.get('state') if state == "present": return self.add_network() if state == "update": return self.update_network() if state == "absent": return self.delete_network() def manage_operations(self): operation = self.params.get('operation') if operation == "read": return self.get_all_networks() def get_resource(self): vapp = self.params.get('vapp') vdc = self.params.get('vdc') org_resource = Org(self.client, resource=self.client.get_org()) vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc)) vapp_resource_href = vdc_resource.get_resource_href( name=vapp, entity_type=EntityType.VAPP) vapp_resource = self.client.get_resource(vapp_resource_href) return vapp_resource def get_network(self): network_name = self.params.get('network') networks = self.vapp.get_all_networks() for network in networks: if network.get('{' + NSMAP['ovf'] + '}name') == network_name: return network raise EntityNotFoundException('Can\'t find the specified vApp network') def get_all_networks(self): response = dict() response['changed'] = False response['msg'] = defaultdict(dict) for network in self.vapp.get_all_networks(): name = network.get('{' + NSMAP['ovf'] + '}name') n = {'description': str(network.Description)} response['msg'][name] = n return response def add_network(self): network_name = self.params.get('network') network_cidr = self.params.get('network_cidr') network_description = self.params.get('description') primary_dns_ip = self.params.get('primary_dns_ip') secondary_dns_ip = self.params.get('secondary_dns_ip') dns_suffix = self.params.get('dns_suffix') ip_ranges = self.params.get('ip_ranges') is_guest_vx_vlan_allowed = self.params.get('is_guest_vx_vlan_allowed') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: add_network_task = self.vapp.create_vapp_network( name=network_name, network_cidr=network_cidr, description=network_description, primary_dns_ip=primary_dns_ip, secondary_dns_ip=secondary_dns_ip, dns_suffix=dns_suffix, ip_ranges=ip_ranges, is_guest_vx_vlan_allowed=is_guest_vx_vlan_allowed) self.execute_task(add_network_task) response['msg'] = 'Vapp Network {} has been added'.format( network_name) response['changed'] = True else: response[ 'warnings'] = 'Vapp Network {} is already present.'.format( network_name) return response def update_network(self): network_name = self.params.get('network') new_network_name = self.params.get('new_network') network_description = self.params.get('description') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: response['warnings'] = 'Vapp Network {} is not present'.format( network_name) else: update_network_task = self.vapp.update_vapp_network( network_name=network_name, new_net_name=new_network_name, new_net_desc=network_description) self.execute_task(update_network_task) response['msg'] = 'Vapp Network {} has been updated'.format( network_name) response['changed'] = True return response def delete_network(self): network_name = self.params.get('network') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: response['warnings'] = 'Vapp Network {} is not present'.format( network_name) else: delete_network_task = self.vapp.delete_vapp_network(network_name) self.execute_task(delete_network_task) response['msg'] = 'Vapp Network {} has been deleted.'.format( network_name) response['changed'] = True return response
class VappNetwork(VcdAnsibleModule): def __init__(self, **kwargs): super(VappNetwork, self).__init__(**kwargs) vapp_resource = self.get_resource() self.vapp = VApp(self.client, resource=vapp_resource) def manage_states(self): state = self.params.get('state') if state == "present": return self.add_network() if state == "absent": return self.delete_network() def get_resource(self): vapp = self.params.get('vapp') vdc = self.params.get('vdc') org_resource = Org(self.client, resource=self.client.get_org()) vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc)) vapp_resource_href = vdc_resource.get_resource_href(name=vapp, entity_type=EntityType.VAPP) vapp_resource = self.client.get_resource(vapp_resource_href) return vapp_resource def get_network(self): network_name = self.params.get('network') networks = self.vapp.get_all_networks() for network in networks: if network.get('{'+NSMAP['ovf']+'}name') == network_name: return network raise EntityNotFoundException('Can\'t find the specified vApp network') def delete_network(self): network_name = self.params.get('network') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: response['warnings'] = 'Vapp Network {} is not present.'.format(network_name) else: network_config_section = self.vapp.resource.NetworkConfigSection for network_config in network_config_section.NetworkConfig: if network_config.get('networkName') == network_name: network_config_section.remove(network_config) delete_network_task = self.client.put_linked_resource( self.vapp.resource.NetworkConfigSection, RelationType.EDIT, EntityType.NETWORK_CONFIG_SECTION.value, network_config_section) self.execute_task(delete_network_task) response['msg'] = 'Vapp Network {} has been deleted.'.format(network_name) response['changed'] = True return response def add_network(self): network_name = self.params.get('network') fence_mode = self.params.get('fence_mode') parent_network = self.params.get('parent_network') ip_scope = self.params.get('ip_scope') response = dict() response['changed'] = False try: self.get_network() except EntityNotFoundException: network_config_section = self.vapp.resource.NetworkConfigSection config = E.Configuration() if parent_network: vdc = self.params.get('vdc') org_resource = Org(self.client, resource=self.client.get_org()) vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc)) orgvdc_networks = vdc_resource.list_orgvdc_network_resources(parent_network) parent = next((network for network in orgvdc_networks if network.get('name') == parent_network), None) if parent: config.append(E.ParentNetwork(href=parent.get('href'))) else: raise EntityNotFoundException('Parent network \'%s\' does not exist'.format(parent_network)) elif ip_scope: scope = E.IpScope( E.IsInherited('false'), E.Gateway(str(ip_network(ip_scope, strict=False).network_address+1)), E.Netmask(str(ip_network(ip_scope, strict=False).netmask))) config.append(E.IpScopes(scope)) else: raise VappNetworkCreateError('Either parent_network or ip_scope must be set') config.append(E.FenceMode(fence_mode)) network_config = E.NetworkConfig(config, networkName=network_name) network_config_section.append(network_config) add_network_task = self.client.put_linked_resource( self.vapp.resource.NetworkConfigSection, RelationType.EDIT, EntityType.NETWORK_CONFIG_SECTION.value, network_config_section) self.execute_task(add_network_task) response['msg'] = 'Vapp Network {} has been added'.format(network_name) response['changed'] = True else: response['warnings'] = 'Vapp Network {} is already present.'.format(network_name) return response