def update_asynchronous_task_details(details: str): """ Update Asynchronous Task details. Print task details during Process execution. Parameters ---------- detail: String The message to display in msa-ui Returns ------- object: Orchestration """ context = Variables.task_call() process_instance_id = context['PROCESSINSTANCEID'] task_id = context['TASKID'] exec_number = context['EXECNUMBER'] orch = Orchestration(None) orch.update_asynchronous_task_details(process_instance_id, task_id, exec_number, details) return orch
def orchestration_fixture(): """Orchestration fixture.""" with patch('requests.post') as mock_post: mock_post.return_value.json.return_value = {'token': '12345qwert'} with patch('msa_sdk.msa_api.host_port') as mock_host_port: mock_host_port.return_value = ('api_hostname', '8080') orch = Orchestration('MSAA19224') return orch
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.orchestration import Orchestration import json #Define variables dev_var = Variables() dev_var.add('var_value', var_type='String') context = Variables.task_call(dev_var) #Get sub-tenant ID OrchestrationObject = Orchestration(context['UBIQUBEID']) #active_workflow contains workflow instances what ARE NOT in ARCHIVED state active_workflow = dict() #matched_workflow contains workflow details where requested valued matched matched_workflow = dict() #Retrive all workflow instanes of particular sub-tenant OrchestrationObject.list_service_instances() #Walk through the instances and add to list non archived ones for service in json.loads(OrchestrationObject.content): if service['state'] != 'ARCHIVED' and str(service['id']) != str( context['service_id']): if service['name'] not in active_workflow: active_workflow[service['name']] = list() active_workflow[service['name']].append({ 'id': service['id'], 'state': service['state']
import json import time import requests from requests.exceptions import HTTPError from requests.exceptions import ConnectionError from msa_sdk.orchestration import Orchestration from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) class AZConnection(): def __init__(self, client_id, client_secret, subscription_id, tenant_id, resource_group, location): self.client_id = client_id self.client_secret = client_secret self.subscription_id = subscription_id self.tenant_id = tenant_id self.resource_group = resource_group self.location = location self.token = self.get_token(tenant_id) self.base_url = "https://management.azure.com" self.net_base_url = "https://management.azure.com" + \ "/subscriptions/" + self.subscription_id + \ "/resourcegroups/" + self.resource_group + \
import json import requests from requests.exceptions import HTTPError from requests.exceptions import ConnectionError from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.orchestration import Orchestration dev_var = Variables() dev_var.add('scale_lvl', var_type='Integer') dev_var.add('scale_vm_role', var_type='String') context = Variables.task_call(dev_var) Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) class AZConnection(): def __init__(self, client_id, client_secret, subscription_id, tenant_id, resource_group, location): self.client_id = client_id self.client_secret = client_secret self.subscription_id = subscription_id self.tenant_id = tenant_id self.resource_group = resource_group self.location = location self.token = self.get_token(tenant_id) self.base_url = "https://management.azure.com" self.net_base_url = "https://management.azure.com" + \ "/subscriptions/" + self.subscription_id + \
import time import json from msa_sdk.variables import Variables from msa_sdk.order import Order from msa_sdk.orchestration import Orchestration from msa_sdk.lookup import Lookup from msa_sdk.device import Device from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) # stub find prim master id -'k8s-node-1' cust_ref = context["UBIQUBEID"] search = Lookup() search.look_list_device_by_customer_ref(cust_ref) device_list = search.content device_list = json.loads(device_list) worker_id_list = [] master = context['vm_name'] + '-1' backup = context['vm_name'] + '-2' # add all vms that are not k8s masters to the list for me in device_list: if me['name'] != (master and backup): worker_id_list.append(me['id'])
ms_router_vrf = context['ipam_ms_aliases']['Router VRF'] ms_router_interface = context['ipam_ms_aliases']['Router interfaces'] ms_router_prefix_filter = context['ipam_ms_aliases']['Router Prefix Filter'] ms_router_import_to_bgp = context['ipam_ms_aliases'][ 'Router Import Connected to BGP'] ms_router_advert_by_bgp = context['ipam_ms_aliases'][ 'Router Import advertised routes by BGP'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) IpamOrderObject = Order(ipam_device_id) #Create CE device order object CeOrderObject = Order(ce_device_id) response = CeOrderObject.command_synchronize(300) pe_order_list = list() #Remove IP addresses from CE-PE links Orchestration.update_asynchronous_task_details(*async_update_list, 'Configuring CE device... ') for interface, connection in ce_connections.items(): #Create oreder object for PE
import time from msa_sdk.variables import Variables from msa_sdk.order import Order from msa_sdk.orchestration import Orchestration from msa_sdk.device import Device from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) # (1) prepare data for k8s_ha_proxy and k8s_package_management microservices k8s_package_management_data = {"object_id": context['proxy_type']} k8s_package_management_ms = { "k8s_package_management": { context['proxy_type']: k8s_package_management_data } } # stub here - actually k8s master nodes should be selected according to the user input k8s_ha_proxy_data = { "object_id": "123", "k8s_m_1_ip": list(context['vms'][0].values())[0]['internal'], "k8s_m_2_ip": list(context['vms'][1].values())[0]['internal'], } k8s_ha_proxy_ms = {"k8s_ha_proxy": {"123": k8s_ha_proxy_data}} # (2) get short ME id
process_id = context['SERVICEINSTANCEID'] ms_ipam_tenant = context['ipam_ms_aliases']['IPAM Tenants'] ms_ipam_site = context['ipam_ms_aliases']['IPAM Sites'] ms_ipam_device = context['ipam_ms_aliases']['IPAM Devices'] ipam_device_id = context['ipam_device_id'] customer_name = context['customer_name'] site = context['site'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create order object IpamOrderObject = Order(ipam_device_id) #Find site ID objects_list = IpamOrderObject.command_objects_instances(ms_ipam_site) #Looking for CE device in STAGED state on the site Orchestration.update_asynchronous_task_details(*async_update_list, 'Looking for CE device on site {} in "staged" state... '.format(site)) #Collect cusromer sites object_id for future use for site in objects_list: site_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_site,
import time import json import datetime from msa_sdk.variables import Variables from msa_sdk.orchestration import Orchestration from msa_sdk.order import Order from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) device_id = context['k8s_api'][3:] k8_pods_list = {'k8_pods_list': {'': {'object_id': ''}}} try: Orchestration.update_asynchronous_task_details(*async_update_list, f'Sync in progress...') order = Order(str(device_id)) order.command_synchronize(timeout=60) Orchestration.update_asynchronous_task_details(*async_update_list, f'Syncronized.') time.sleep(2) Orchestration.update_asynchronous_task_details(*async_update_list, f'Check in progress...') order.command_execute('IMPORT', k8_pods_list) data = json.loads(order.content)
'IPAM Available Prefixes'] ms_ipam_address = context['ipam_ms_aliases']['IPAM IPv4 addresses'] ms_ipam_vrf = context['ipam_ms_aliases']['IPAM VRFs'] ms_router_bgp_neighbor = context['ipam_ms_aliases']['Router BGP neighbours'] ms_router_bgp_speaker = context['ipam_ms_aliases']['Router BGP speaker'] ms_router_vrf = context['ipam_ms_aliases']['Router VRF'] ms_router_interface = context['ipam_ms_aliases']['Router interfaces'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) IpamOrderObject = Order(ipam_device_id) #Create CE device order object CeOrderObject = Order(ce_device_id) response = CeOrderObject.command_synchronize(300) pe_order_list = list() Orchestration.update_asynchronous_task_details(*async_update_list, 'Configuring CE device... ') for interface, connection in ce_connections.items(): Orchestration.update_asynchronous_task_details(
import json import time import requests from requests.exceptions import HTTPError from requests.exceptions import ConnectionError from msa_sdk.orchestration import Orchestration from msa_sdk.variables import Variables from msa_sdk.order import Order from msa_sdk.msa_api import MSA_API from msa_sdk.lookup import Lookup from msa_sdk.device import Device dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) # --------------- START OF AZConnection CLASS class AZConnection(): def __init__(self, client_id, client_secret, subscription_id, tenant_id, resource_group, location): self.client_id = client_id self.client_secret = client_secret self.subscription_id = subscription_id self.tenant_id = tenant_id self.resource_group = resource_group self.location = location self.token = self.get_token(tenant_id)
process_id = context['SERVICEINSTANCEID'] ms_vlan = context['ms_aliases']['Station VLAN management'] ms_port_vlan = context['ms_aliases'][ 'Station Ethernet port VLAN configuration'] ms_hostname = context['ms_aliases']['Station hostname'] ms_port_settings = context['ms_aliases']['Station Ethernet port settings'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) Orchestration.update_asynchronous_task_details( *async_update_list, 'Import current configuration... ') #Create Station device order object StationOrderObject = Order(context['station_device_id']) response = StationOrderObject.command_synchronize(300) Orchestration.update_asynchronous_task_details( *async_update_list, 'Import current configuration... OK') time.sleep(3) #Check VLAN IDs Orchestration.update_asynchronous_task_details(*async_update_list,
ms_interface_connection = context['ipam_ms_aliases'][ 'IPAM Interface Connections'] ms_ipam_prefix = context['ipam_ms_aliases']['IPAM IPv4 prefixes'] ms_ipam_avaliable_prefix = context['ipam_ms_aliases'][ 'IPAM Available Prefixes'] ms_ipam_address = context['ipam_ms_aliases']['IPAM IPv4 addresses'] ms_ipam_interface = context['ipam_ms_aliases']['IPAM Interfaces'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create IPAM order object IpamOrderObject = Order(ipam_device_id) IpamOrderObject.command_synchronize(300) objects_list = IpamOrderObject.command_objects_instances(ms_ipam_device) #Retrieve information about CE device what is located on the site counter = 0 ce_device_id = None ce_device_name = None #Find CE device name
ms_interface_connection = context['ipam_ms_aliases'][ 'IPAM Interface Connections'] ms_ipam_prefix = context['ipam_ms_aliases']['IPAM IPv4 prefixes'] ms_ipam_avaliable_prefix = context['ipam_ms_aliases'][ 'IPAM Available Prefixes'] ms_ipam_address = context['ipam_ms_aliases']['IPAM IPv4 addresses'] ms_ipam_interface = context['ipam_ms_aliases']['IPAM Interfaces'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create IPAM order object IpamOrderObject = Order(ipam_device_id) IpamOrderObject.command_synchronize(300) Orchestration.update_asynchronous_task_details( *async_update_list, 'Retrieve information about CE device on the site... ') objects_list = IpamOrderObject.command_objects_instances(ms_ipam_device) #Retrieve information about CE device what is located on the site counter = 0 ce_device_id = None
#Import microservice alias list with open( '/opt/fmc_repository/Process/Microwave_station_provisioning/microservices_list.json', 'r') as alias_file: context['ms_aliases'] = json.load(alias_file) ms_ipam_vlan = context['ms_aliases']['IPAM VLAN management'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create VLAN list if IPAM is used if context['use_ipam'] == 'yes': Orchestration.update_asynchronous_task_details( *async_update_list, 'IPAM integration is used. Retrive VLAN info from IPAM... ') context['ipam_device'] = re.match('^\D+?(\d+?)$', context['ipam_device']).group(1) #Retrive information about VLANs IpamOrderObject = Order(context['ipam_device']) IpamOrderObject.command_synchronize(300)
import time import requests from requests.exceptions import HTTPError from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) from msa_sdk.variables import Variables from msa_sdk.device import Device from msa_sdk.order import Order from msa_sdk.msa_api import MSA_API from msa_sdk.orchestration import Orchestration dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) class MSAConnect(): def __init__(self, hostname, username, password): self.username = username self.password = password self.base_url = "https://" + hostname + "/ubi-api-rest" self.token = self.get_token() def get_token(self): url = self.base_url + "/auth/token"
import time import json from msa_sdk.variables import Variables from msa_sdk.order import Order from msa_sdk.orchestration import Orchestration from msa_sdk.lookup import Lookup from msa_sdk.device import Device from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) # stub find prim master id -'k8s-node-1' cust_ref = context["UBIQUBEID"] search = Lookup() search.look_list_device_by_customer_ref(cust_ref) device_list = search.content device_list = json.loads(device_list) for me in device_list: if me['name'] == context['vm_name'] + '-1': master_id = me['id'] elif me['name'] == context['vm_name'] + '-2': backup_id = me['id'] # (1) kubeadm init on master first # stub here - actually k8s master nodes should be selected according to the user input
ce_device_id = context['ce_device_details']['device_id'] ce_device_external_reference = context['ce_device_details']['external_reference'] ce_device_name = context['ce_device_details']['ce_device_name'] ce_local_context = context['ce_device_details']['local_context'] ms_ipam_device = context['ipam_ms_aliases']['IPAM Devices'] customer_name = context['customer_name'] ipam_device_id = context['ipam_device_id'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #IPAM order object IpamOrderObject = Order(ipam_device_id) #Create CE device object CeDeviceObject = Device(device_id = ce_device_id, device_external = ce_device_external_reference) pretty_formatted_bar = list('------------------------') Orchestration.update_asynchronous_task_details(*async_update_list, 'Provisioning of CE device... [{}]'.format(''.join(pretty_formatted_bar))) #If the device mgmt interface is REST-based, add required configuration variables if 'rest' in ce_local_context['interface'].lower(): for variable, value in ce_local_context['msa_specific']['rest_headers'].items():
def info_message(text, timeout=1): Orchestration.update_asynchronous_task_details(*async_update_list, text) time.sleep(timeout)
import requests from requests.exceptions import HTTPError from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) from msa_sdk.variables import Variables from msa_sdk.orchestration import Orchestration from msa_sdk.device import Device from msa_sdk.msa_api import MSA_API dev_var = Variables() # dev_var.add('vm_username', var_type='String') # dev_var.add('vm_secret', var_type='Password') context = Variables.task_call(dev_var) Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) class MSAConnect(): def __init__(self, hostname, username, password): self.username = username self.password = password self.base_url = "https://" + hostname + "/ubi-api-rest" self.token = self.get_token() def get_token(self): url = self.base_url + "/auth/token"
process_id = context['SERVICEINSTANCEID'] nec_ipasolink_manufacture_id = '70000' nec_ipasolink_model_id = '7000123' nec_ipasolink_default_password = '******' nec_ipasolink_default_username = '******' nec_ipasolink_profile_name = 'nec_ipasolink_profile' #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create microwave station object StationDeviceObject = Device( customer_id=re.match('^\D+?(\d+?)$', context['UBIQUBEID']).group(1), name='{}[{}]'.format(context['hostname'], context['ip_address']), device_external=re.sub(r'[\.\[\]-]', "_", context['hostname']), manufacturer_id=nec_ipasolink_manufacture_id, password_admin=nec_ipasolink_default_password, model_id=nec_ipasolink_model_id, login=nec_ipasolink_default_username, password=nec_ipasolink_default_password, management_address=context['ip_address'], management_port='22')
import time import json from msa_sdk.variables import Variables from msa_sdk.order import Order from msa_sdk.orchestration import Orchestration from msa_sdk.lookup import Lookup from msa_sdk.device import Device from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) if int(context["scale_lvl"]) <= 0: ret = MSA_API.process_content('ENDED', f'Scale-in completed. Skipping.', context, True) print(ret) exit() # Find master - hardcoded 'k8s-node-1' cust_ref = context["UBIQUBEID"] search = Lookup() search.look_list_device_by_customer_ref(cust_ref) device_list = search.content device_list = json.loads(device_list) for me in device_list: if me['name'] == context['vm_name'] + '-1':
import time import json from msa_sdk.lookup import Lookup from msa_sdk.device import Device from msa_sdk.order import Order from msa_sdk.orchestration import Orchestration from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) if int(context["scale_lvl"]) <= 0: ret = MSA_API.process_content('ENDED', f'Scale-in completed. Skipping.', context, True) print(ret) exit() # (1) prepare data for k8s_pre_requirements microservice k8s_pre_requirements_data = {"object_id": "123"} k8s_pre_requirements_ms = { "k8s_pre_requirements": { "123": k8s_pre_requirements_data } } device_list = context['vm_id_list_new']
ms_router_bgp_neighbor = context['ipam_ms_aliases']['Router BGP neighbours'] ms_router_bgp_speaker = context['ipam_ms_aliases']['Router BGP speaker'] ms_router_vrf = context['ipam_ms_aliases']['Router VRF'] ms_router_interface = context['ipam_ms_aliases']['Router interfaces'] ms_router_prefix_filter = context['ipam_ms_aliases']['Router Prefix Filter'] ms_router_import_to_bgp = context['ipam_ms_aliases']['Router Import Connected to BGP'] ms_router_advert_by_bgp = context['ipam_ms_aliases']['Router Import advertised routes by BGP'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create CE device order object CeOrderObject = Order(ce_device_id) response = CeOrderObject.command_synchronize(300) #Create IPAM order object IpamOrderObject = Order(ipam_device_id) response = IpamOrderObject.command_synchronize(300) Orchestration.update_asynchronous_task_details(*async_update_list, 'Configuring IP address on CE device internal link... ') #Configure IP address on CE internal interface ms_dict = {ms_router_interface: {ce_internal_interface_name: {'object_id': ce_internal_interface_name, 'ip_addr': ce_internal_interface_ip.split('/')[0],
ms_ipam_tenant = context['ipam_ms_aliases']['IPAM Tenants'] ms_ipam_site = context['ipam_ms_aliases']['IPAM Sites'] ms_ipam_device = context['ipam_ms_aliases']['IPAM Devices'] ms_ipam_vrf = context['ipam_ms_aliases']['IPAM VRFs'] ipam_device_id = context['ipam_device_id'] customer_name = context['customer_name'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create order object IpamOrderObject = Order(ipam_device_id) IpamOrderObject.command_synchronize(300) #Retrieve info about tenants Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieving information about customer... ') objects_list = IpamOrderObject.command_objects_instances(ms_ipam_tenant) #Check if customer exists in IPAM system does_tenant_exists = False counter = 0 while not does_tenant_exists and counter < len(objects_list):
ms_ipam_site = context['ipam_ms_aliases']['IPAM Sites'] ms_ipam_device = context['ipam_ms_aliases']['IPAM Devices'] ms_interface_connection = context['ipam_ms_aliases']['IPAM Interface Connections'] ms_ipam_prefix = context['ipam_ms_aliases']['IPAM IPv4 prefixes'] ms_ipam_avaliable_prefix = context['ipam_ms_aliases']['IPAM Available Prefixes'] ms_ipam_address = context['ipam_ms_aliases']['IPAM IPv4 addresses'] ms_ipam_interface = context['ipam_ms_aliases']['IPAM Interfaces'] #Variables to finish the task properlly fail_comment = str() success_comment = str() fail_string = f'{{"wo_status": "FAIL", "wo_comment": "{fail_comment}"}}' success_string = f'{{"wo_status": "ENDED", "wo_comment": "{success_comment}"}}' #Create Orchestration object to update GUI dynamically Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) #Create IPAM order object IpamOrderObject = Order(ipam_device_id) IpamOrderObject.command_synchronize(300) #Identify ASN for the site and save to context Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieve AS number for the site... ') site_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_site, site)[ms_ipam_site][site] context['site_asn'] = site_object['asn'] Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieve AS number for the site... OK') time.sleep(3)
from inspect import signature from msa_sdk import util from msa_sdk.conf_profile import ConfProfile from msa_sdk.customer import Customer from msa_sdk.device import Device from msa_sdk.lookup import Lookup from msa_sdk.orchestration import Orchestration from msa_sdk.order import Order from msa_sdk.repository import Repository from msa_sdk.variables import Variables device = Device() lookup = Lookup() order = Order(1) orchestration = Orchestration(1) repository = Repository() customer = Customer() conf_profile = ConfProfile() variable = Variables() output_doc = collections.defaultdict(dict) # type: dict def get_members(cls_name, obj): """Extract members.""" output_doc[cls_name] = {"methods": list()} for i in inspect.getmembers(obj, predicate=inspect.ismethod): if i[0].startswith('__init__'): output_doc[cls_name]["methods"].append({ i[0]: {