Hello,
I’d like to create an Azure Resource Group before creating a new instance in it.
To achieve that goal, I’ve created a Python task which does API calls to create a resource group and refresh the Morpheus cloud.
This task is running in the Config phase of the workflow and works well, as the specified RG is created and we can see it in clouds/resources.
The problem seems to be that the catalog item is not aware of it.
Here is my configuration
"config": {
"createUser": false,
"isEC2": false,
"isVpcSelectable": true,
"noAgent": false,
"azureRegion": "francecentral",
"azuresecurityGroupId": null,
"availabilityOptions": "",
"availabilityZone": 1,
"availabilitySet": "",
"azurefloatingIp": false,
"bootDiagnostics": null,
"osGuestDiagnostics": "off",
"diagnosticsStorageAccount": null,
"resourcePoolId": "<%=results.azcreaterg.id%>",
"poolProviderType": null
},
However, when ordering the catalog, it fails with an error message:
2023-11-24_22:59:56.80483 ''[2023-11-24 22:59:56,806] [appJobHigh-20] INFO c.m.p.AzureProvisionService - runContainer: com.morpheus.Container : 21 [instanceId:21, refId:21, jobType:instanceContainerProvision, instanceProvisionStart:1700866795986, newContainers:[21], newContainerCount:1, containerIndex:0, policyConfig:[success:true, categories:[provision, lifecycle], allowed:true, provision:false, requireApproval:false, results:[[success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true], [success:true, allowed:true]], policies:[:]], containerProvisionStart:1700866796328, provisionService:com.morpheus.provision.AzureProvisionService@225c7466, processUser:mlusseaud, processMap:com.morpheus.ProcessService$ProcessDetail@404207a5, processStepMap:com.morpheus.ProcessService$ProcessStepDetails@6b25e5a4, containerService:com.morpheus.ContainerService@2be95a07, callbackService:com.morpheus.ContainerService@2be95a07, callbackType:provision, networkConfig:[primaryInterface:[networkType:dhcp, id:61, subnet:com.morpheus.NetworkSubnet : 19, macAddress:null, network:com.morpheus.Network : 666, vlanId:null, type:null, doStatic:false, doStatic6:false, doDhcp:true, doDhcp6:false, ipv4Enabled:true, ipv6Enabled:false, name:eth0, externalId:/subscriptions/3ff78315-7d97-418e-bced-34d5cafc104a/resourceGroups/rg-dev-frc-dev-poc/providers/Microsoft.Network/virtualNetworks/vnet-bel-d-fr-office, searchDomains:null], extraInterfaces:[], doStatic:false, doDhcp:false, doCustomizations:false, havePool:false, haveDhcpReservation:false, success:true, networkDomain:[domainController:false, domainUsername:null, domainPassword:*******, ouPath:null, dcServer:null, name:localdomain, fqdn:null, guestUsername:null, guestPassword:null]]]
2023-11-24_22:59:56.80673 ''[2023-11-24 22:59:56,807] [appJobHigh-20] DEBUG c.m.p.AzureProvisionService - Container Config [maxMemory:34359738368, maxStorage:34359738368, maxCpu:0, maxCores:8, createUser:false, isEC2:false, isVpcSelectable:true, noAgent:false, azureRegion:francecentral, azuresecurityGroupId:null, availabilityOptions:, availabilityZone:1, availabilitySet:, azurefloatingIp:false, bootDiagnostics:null, osGuestDiagnostics:off, diagnosticsStorageAccount:null, resourcePoolId:<%=results.azcreaterg.id%>, poolProviderType:null, userGroup:[id:], tags:test,vmcreation, name:AZR-DMLUTST9, hostName:azr-dmlutst9, instanceType:[code:null], site:[id:9], environmentPrefix:null, layout:[id:1159, code:d4c96917-03a2-48cd-9710-d9213a5654e6], type:belw2019, instanceContext:d_dev, memoryDisplay:MB, expose:[], azRgName:rg-bel-d-mlutst-010, vm:true, networkInterfaces:[[id:subnet-19, network:[id:null, group:null, subnet:19, dhcpServer:true, name:vnet-bel-d-fr-office - snet-bel-d-fr-office-poc, pool:null], ipAddress:null, networkInterfaceTypeId:null, ipMode:]], volumes:[[rootVolume:true, name:root, maxStorage:34359738368, size:32, volumeCustomizable:true, readonlyName:false, storageType:40, maxIOPS:null, datastoreId:457, id:-1]], storageController:null, azureUsr:null, azurePwd:*******, subnetId:null, securityGroupId:null, floatingIp:null, sizeRef:Standard_B8ms, resourcePool:<%=results.azcreaterg.id%>, templateTypeSelect:null, marketplacePublisher:null, marketplaceOffer:null, marketplaceSku:null, marketplaceVersion:null, publicKeyId:null, taskSetId:3, hosts:[container21:127.0.0.1], evars:[:]]
2023-11-24_22:59:56.80719 ''[2023-11-24 22:59:56,821] [appJobHigh-20] ERROR c.m.p.AzureProvisionService - runContainer error: java.lang.NullPointerException: Cannot get property 'regionCode' on null object
2023-11-24_22:59:56.82153 'java.lang.NullPointerException: Cannot get property 'regionCode' on null object'
2023-11-24_22:59:56.82155 at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
<cut>
2023-11-24_22:59:56.82201 at java.base/java.lang.Thread.run(Unknown Source)
2023-11-24_22:59:56.89637 '[2023-11-24 22:59:56,896] [appJobHigh-20] ERROR c.m.ContainerService - Unable to deploy container: Failed to create server: Cannot get property 'regionCode' on null object
2023-11-24_22:59:56.89639 ''[2023-11-24 22:59:56,944] [appJobHigh-20] INFO c.m.ContainerService - provisionContainer runResult.success: false
2023-11-24_22:59:56.94477 ''[2023-11-24 22:59:56,985] [appJobHigh-20] ERROR c.m.ContainerService - Unable to deploy container: null
2023-11-24_22:59:56.98550 ''[2023-11-24 22:59:56,985] [appJobHigh-20] ERROR c.m.InstanceProvisionService - Unable to deploy container: [success:false, inProgress:false, msg:null]
2023-11-24_22:59:56.98575 ''[2023-11-24 22:59:56,991] [appJobHigh-20] WARN c.m.InstanceProvisionService - provision failed
Finally, the code of the Python task is :
import json, requests, urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
configspec = morpheus['spec']
MORPHEUS_VERIFY_SSL_CERT = False
MORPHEUS_HOST = morpheus['morpheus']['applianceHost']
MORPHEUS_TENANT_TOKEN = morpheus['morpheus']['apiAccessToken']
AZURE_VMName = configspec['customOptions']['azRgName']
MORPHEUS_HEADERS = {"Content-Type":"application/json","Accept":"application/json","Authorization": "Bearer " + MORPHEUS_TENANT_TOKEN}
url1 = 'https://%s/api/zones/155/resource-pools' % (MORPHEUS_HOST )
payload = {"resourcePool": {
"defaultPool": False,
"defaultImage": False,
"active": True,
"visibility": "private",
"inventory": True,
"config": {"tenancy": "default"},
"resourcePermissions": {
"all": True,
"allPlans": True
},
"name": AZURE_VMName
}}
#response1 = requests.post(url1, json=payload, headers=MORPHEUS_HEADERS, verify=MORPHEUS_VERIFY_SSL_CERT)
response1 = requests.post(url1, json=payload, headers=MORPHEUS_HEADERS, verify=False)
data1 = response1.json()
resourcePoolId = data1['resourcePool']['id']
print("id=pool-"+str(resourcePoolId))
Do you have an idea where the problem is?
Regards,
Matthieu