[docs]asyncdefpresent(hub,ctx,name:str,definition:Any,id:Any,projectId:Any,**kwargs):""" :param Any definition: (required in body) :param string id: (required in body) Entitlement id :param string projectId: (required in body) Project id :param string apiVersion: (optional in query) The version of the API in yyyy-MM-dd format (UTC). If you do not specify explicitly an exact version, you will be calling the latest supported API version. :param boolean migrated: (optional in body) Migrated flag for entitlements """try:state=CatalogEntitlementsStateImpl(hub,ctx)returnawaitstate.present(hub,ctx,name,definition,id,projectId,**kwargs)exceptExceptionaserror:hub.log.error("Error during enforcing present state: catalogentitlements")hub.log.error(str(error))raiseerror
[docs]asyncdefabsent(hub,ctx,name:str,**kwargs):""" :param string p_id: (required in path) Entitlement id :param string apiVersion: (optional in query) The version of the API in yyyy-MM-dd format (UTC). If you do not specify explicitly an exact version, you will be calling the latest supported API version. """""" :param string name: (required) name of the resource """try:state=CatalogEntitlementsStateImpl(hub,ctx)returnawaitstate.absent(hub,ctx,name,**kwargs)exceptExceptionaserror:hub.log.error("Error during enforcing absent state: catalogentitlements")hub.log.error(str(error))raiseerror
[docs]asyncdefdescribe(hub,ctx):try:state=CatalogEntitlementsStateImpl(hub,ctx)returnawaitstate.describe(hub,ctx)exceptExceptionaserror:hub.log.error("Error during describe: catalogentitlements")hub.log.error(str(error))raiseerror
[docs]defis_pending(hub,ret:dict,state:str=None,**pending_kwargs):try:state=CatalogEntitlementsStateImpl(hub,None)returnstate.is_pending(hub,ret,state,**pending_kwargs)exceptExceptionaserror:hub.log.error("Error during is_pending: catalogentitlements")hub.log.error(str(error))raiseerror
[docs]asyncdefpresent(self,hub,ctx,name:str,definition:Any,id:Any,projectId:Any,**kwargs):# version checkif"vra_version"inctx.acctand(semver.compare(ctx.acct.vra_version,"8.0.0")==-1orsemver.compare("8.8.1",ctx.acct.vra_version)==-1):hub.log.warning(f"Unsupported version min:8.0.0 max:8.8.1 target:{ctx.acct.vra_version} for resource:catalogentitlements")returnStateReturn(result=True,comment=f"State present is not available for resource catalogentitlements.",old=None,new=None,)search_result=(awaitself.paginate_find(hub,ctx))["ret"]forsinsearch_result.content:ifname==s["name"]andTrue:hub.log.info(f'Returning resource catalogentitlements "{s["name"]}" due to existing resource "{name}"')s=awaitself.remap_resource_structure(hub,ctx,s)returnStateReturn(result=True,comment=f"Resource catalogentitlements {name} already exists.",old=s,new=s,)res=(awaithub.exec.vra.catalog.catalogentitlements.create_entitlement_using_post2(ctx,definition,id,projectId,**kwargs))["ret"]res=awaitself.remap_resource_structure(hub,ctx,res)returnStateReturn(result=True,comment=f"Creation of catalogentitlements {name} success.",old=None,new=res,)
[docs]asyncdefabsent(self,hub,ctx,name:str,**kwargs):# version checkif"vra_version"inctx.acctand(semver.compare(ctx.acct.vra_version,"8.0.0")==-1orsemver.compare("8.8.1",ctx.acct.vra_version)==-1):hub.log.warning(f"Unsupported version min:8.0.0 max:8.8.1 target:{ctx.acct.vra_version} for resource:catalogentitlements")returnStateReturn(result=True,comment=f"State absent is not available for resource catalogentitlements.",old=None,new=None,)search_result=(awaitself.paginate_find(hub,ctx))["ret"]resource=Noneforsinsearch_result.content:ifname==s["name"]andTrue:hub.log.info(f'Found resource catalogentitlements "{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"catalogentitlements with name = {resource.get('name')} already exists")awaithub.exec.vra.catalog.catalogentitlements.delete_entitlement_using_delete2(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):# version checkif"vra_version"inctx.acctand(semver.compare(ctx.acct.vra_version,"8.0.0")==-1orsemver.compare("8.8.1",ctx.acct.vra_version)==-1):hub.log.warning(f"Unsupported version min:8.0.0 max:8.8.1 target:{ctx.acct.vra_version} for resource:catalogentitlements")return{}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.catalog.catalogentitlements.present":props}returnresult
[docs]asyncdefpaginate_find(self,hub,ctx,**kwargs):""" Paginate through all resources using their 'find' method. """res=(awaithub.exec.vra.catalog.catalogentitlements.get_entitlements_using_get2(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 catalogentitlements with offset={initialElements} out of {totalElements}")pres=awaithub.exec.vra.catalog.catalogentitlements.get_entitlements_using_get2(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=None# Perform resource mapping by adding properties and omitting properties.# Property renaming is addition followed by omission.ifschema_mapper:resource_name="catalogentitlements"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
# ====================================# State override# ====================================fromidem_vra.helpers.queryimportquery
[docs]asyncdefdescribe(self,hub,ctx):# version checkif"vra_version"inctx.acctand(semver.compare(ctx.acct.vra_version,"8.0.0")==-1orsemver.compare("8.8.1",ctx.acct.vra_version)==-1):hub.log.warning(f"Unsupported version min:8.0.0 max:8.8.1 target:{ctx.acct.vra_version} for resource:catalogentitlements")return{}result={}# Retrieve list of all projectsprojects=awaithub.states.vra.iaas.project.describe(ctx)project_ids=query("*.*[?(@.id)].id",projects)# Build a list of all entitlementsentitlements=[]forproject_idinproject_ids:hub.log.debug(f"Requesting catalogentitlements for project {project_id}")res=awaithub.exec.vra.catalog.catalogentitlements.get_entitlements_using_get2(ctx,project_id=project_id)entitlements+=res.get("ret",[])forobjinentitlements:# 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.catalog.catalogentitlements.present":props}returnresult