[docs]asyncdefpresent(hub,ctx,name:str,startIPAddress:Any,endIPAddress:Any,**kwargs):""" :param string name: (required in body) A human-friendly name used as an identifier in APIs that support this option. :param string startIPAddress: (required in body) Start IP address of the range. :param string endIPAddress: (required in body) End IP address of the range. :param string apiVersion: (optional in query) The version of the API in yyyy-MM-dd format (UTC). For versioning information refer to /iaas/api/about :param array fabricNetworkIds: (optional in body) The Ids of the fabric networks. :param string ipVersion: (optional in body) IP address version: IPv4 or IPv6. Default: IPv4. :param string description: (optional in body) A human-friendly description. :param array tags: (optional in body) A set of tag keys and optional values that were set on this resource instance. """try:state=NetworkiprangeState(hub,ctx)returnawaitstate.present(hub,ctx,name,startIPAddress,endIPAddress,**kwargs)exceptExceptionaserror:hub.log.error("Error during enforcing present state: networkiprange")hub.log.error(str(error))raiseerror
[docs]asyncdefabsent(hub,ctx,name:str,**kwargs):""" :param string p_id: (required in path) The ID of the network IP range. :param string apiVersion: (optional in query) The version of the API in yyyy-MM-dd format (UTC). For versioning information refer to /iaas/api/about """""" :param string name: (required) name of the resource """try:state=NetworkiprangeState(hub,ctx)returnawaitstate.absent(hub,ctx,name,**kwargs)exceptExceptionaserror:hub.log.error("Error during enforcing absent state: networkiprange")hub.log.error(str(error))raiseerror
[docs]asyncdefdescribe(hub,ctx):try:state=NetworkiprangeState(hub,ctx)returnawaitstate.describe(hub,ctx)exceptExceptionaserror:hub.log.error("Error during describe: networkiprange")hub.log.error(str(error))raiseerror
[docs]defis_pending(hub,ret:dict,state:str=None,**pending_kwargs):try:state=NetworkiprangeState(hub,None)returnstate.is_pending(hub,ret,state,**pending_kwargs)exceptExceptionaserror:hub.log.error("Error during is_pending: networkiprange")hub.log.error(str(error))raiseerror
[docs]asyncdefpresent(self,hub,ctx,name:str,startIPAddress:Any,endIPAddress:Any,**kwargs):search_result=(awaitself.paginate_find(hub,ctx))["ret"]forsinsearch_result.content:ifname==s["name"]andTrue:hub.log.info(f'Returning resource networkiprange "{s["name"]}" due to existing resource "{name}"')s=awaitself.remap_resource_structure(hub,ctx,s)returnStateReturn(result=True,comment=f"Resource networkiprange {name} already exists.",old=s,new=s,)res=(awaithub.exec.vra.iaas.networkiprange.create_internal_network_ip_range(ctx,name,startIPAddress,endIPAddress,**kwargs))["ret"]res=awaitself.remap_resource_structure(hub,ctx,res)returnStateReturn(result=True,comment=f"Creation of networkiprange {name} success.",old=None,new=res,)
[docs]asyncdefabsent(self,hub,ctx,name:str,**kwargs):search_result=(awaitself.paginate_find(hub,ctx))["ret"]resource=Noneforsinsearch_result.content:ifname==s["name"]andTrue:hub.log.info(f'Found resource networkiprange "{s["name"]}" due to existing resource "{name}"')s=awaitself.remap_resource_structure(hub,ctx,s)resource=sifresource:# it exists!delete_kwargs={}delete_kwargs["p_id"]=resource.get("id")hub.log.debug(f"networkiprange with name = {resource.get('name')} already exists")awaithub.exec.vra.iaas.networkiprange.delete_internal_network_ip_range(ctx,**delete_kwargs)returnStateReturn(result=True,comment=f"Resource with name = {resource.get('name')} deleted.",old=resource,new=None,)returnStateReturn(result=True,comment=f"Resource with name = {name} is already absent.",old=None,new=None,)
[docs]asyncdefdescribe(self,hub,ctx):result={}res=awaitself.paginate_find(hub,ctx)forobjinres.get("ret",{}).get("content",[]):# Keep track of name and id properties as they may get remappedobj_name=obj.get("name","unknown")obj_id=obj.get("id","unknown")obj=awaitself.remap_resource_structure(hub,ctx,obj)# Define propsprops=[{key:value}forkey,valueinobj.items()]# Build resultresult[f"{obj_name}-{obj_id.split('-')[-1]}"]={"vra.iaas.networkiprange.present":props}returnresult
[docs]asyncdefpaginate_find(self,hub,ctx,**kwargs):""" Paginate through all resources using their 'find' method. """res=awaithub.exec.vra.iaas.networkiprange.get_internal_network_ip_ranges(ctx,**kwargs)numberOfElements=res.get("ret",{}).get("numberOfElements",0)totalElements=res.get("ret",{}).get("totalElements",0)initialElements=numberOfElementsifnumberOfElements!=totalElementsandtotalElements!=0:whileinitialElements<totalElements:hub.log.debug(f"Requesting networkiprange with offset={initialElements} out of {totalElements}")pres=awaithub.exec.vra.iaas.networkiprange.get_internal_network_ip_ranges(ctx,skip=initialElements)initialElements+=pres.get("ret",{}).get("numberOfElements",0)aggO=res.get("ret",{}).get("content",[])aggN=pres.get("ret",{}).get("content",[])res["ret"]["content"]=[*aggO,*aggN]res["ret"]["numberOfElements"]=initialElementsreturnres
[docs]defis_pending(self,hub,ret:dict,state:str=None,**pending_kwargs):""" State reconciliation """hub.log.debug(f'Running is_pending for resource: {ret.get("__id__",None)}...')is_pending_result=Falsehub.log.debug(f'is_pending_result for resource "{ret.get("__id__",None)}": {is_pending_result}')returnis_pending_result
[docs]asyncdefremap_resource_structure(self,hub,ctx,obj:dict)->dict:schema_mapper={"add":[],"omit":["orgId","_links","owner","createdAt","updatedAt","externalId",],}# Perform resource mapping by adding properties and omitting properties.# Property renaming is addition followed by omission.ifschema_mapper:resource_name="networkiprange"hub.log.debug(f"Remapping resource {resource_name}...")obj=awaitadd_properties(obj,schema_mapper.get("add",[]))obj=omit_properties(obj,schema_mapper.get("omit",[]))returnobj