data=json.dumps(payload)) if 'key' in response.json(): return response.json()['key'] else: return response.json() if __name__ == "__main__": try: four = JiraConnection(context['jira_fqdn'], context['jira_user'], context['jira_pass'], context['jira_project_id']) ticket_id = four.open_ticket(f'Check WF Instancem, \ PROCESS ID: {context["PROCESSINSTANCEID"]}' ) except ConnectionError: ret = MSA_API.process_content('WARNING', f'Connection Error - Check Internet', context, True) print(ret) exit() except HTTPError: ret = MSA_API.process_content('WARNING', f'HTTP Error - Check API', context, True) print(ret) exit() ret = MSA_API.process_content('ENDED', f'{ticket_id} created.', context, True) print(ret)
######################################################################################################## # DEPLOY USER APP # ######################################################################################################## ''' Generate data in format. ms_vars_dict = {"namespace": , "pod_name": , "container_name": , "remote_ip": } ''' oid = rand_int() ms_vars_dict = { "object_id": oid, "namespace": context['user_ns'], "user_app": context['user_app'] } Order(target_device_id).command_execute('CREATE', {'k8s_user_app': { oid: ms_vars_dict }}) ret = MSA_API.process_content( 'ENDED', f'App {context["user_app"]} Deployed on {context["target_device_name"]}', context, True) print(ret)
Orchestration = Orchestration(context['UBIQUBEID']) async_update_list = (context['PROCESSINSTANCEID'], context['TASKID'], context['EXECNUMBER']) # (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}} # prepare device list, by id 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) # deploy required packages for me in device_list: Orchestration.update_asynchronous_task_details(*async_update_list, f'k8s software installation: \ {Device(device_id=me["id"]).name}') try: order = Order(me['id']) order.command_execute('CREATE', k8s_pre_requirements_ms, timeout=300) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) ret = MSA_API.process_content('ENDED', f'K8S software installed.', context, True) print(ret)
''' example curl http://49.135.32.214:8888/restconf/sdm1/delete/1/1 -X POST Visit http://[YOUR_MSA_URL]/msa_sdk/ to see what you can import. ''' from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API import requests dev_var = Variables() context = Variables.task_call(dev_var) #x = requests.post('https://w3schools.com/python/demopage.htm') x = requests.post('http://49.135.32.214:8888/restconf/sdm1/delete/1/1') ok = "OK" in x.text if ok: ret = MSA_API.process_content('ENDED', f'{x.text}', context, True) else: ret = MSA_API.process_content('FAILED', f'{x.text}', context, True) print(ret)
import json from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order context = Variables.task_call() device_id_list = context["device_id_list"] device_ip_list = context["device_ip_list"] ms_vars_dict_list = context["ms_vars_dict_list"] metrics = {} for device in device_id_list.values(): device_metrics = [] for ip in device_ip_list.values(): order = Order(device) order.command_execute('IMPORT', {'k8s_log': {'':{'pod_name':ip.replace(".","-")}}}) data = json.loads(order.content.decode()) # strip unnecessary fields device_metrics.append(json.loads(data['message'])) metrics[device] = device_metrics context['metrics'] = metrics ret = MSA_API.process_content('ENDED', f'Metrics collected', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('device', var_type='Device') context = Variables.task_call(dev_var) ret = MSA_API.process_content('ENDED', 'workflow initialised', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order dev_var = Variables() context = Variables.task_call() # (2) secrets try: order = Order(context["left_device_id"]) order.command_execute("CREATE", context["sdwan_ipsec_secret_left"]) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) try: order = Order(context["right_device_id"]) order.command_execute('CREATE', context["sdwan_ipsec_secret_right"]) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) ret = MSA_API.process_content('ENDED', f'Secrets Created.', context, True) print(ret)
matched_workflow[workflow] = dict() if instance['id'] not in matched_workflow[workflow]: matched_workflow[workflow][instance['id']] = { 'state': instance['state'], 'variable_list': list() } matched_workflow[workflow][ instance['id']]['variable_list'].append(var) #Create context variable to show in GUI context['matched'] = list() #Finish successfully if at least one WF was found, show warning else if not len(matched_workflow): ret = MSA_API.process_content('WARNING', 'There is no workflow with requested value', context, True) else: for workflow, details in matched_workflow.items(): for instance, vars in details.items(): for var in vars['variable_list']: context['matched'].append({ 'workflow_name': workflow, 'instance_id': instance, 'variable_name': var['name'], 'variable_value': var['value'], 'variable_comment': var['comment'] }) ret = MSA_API.process_content( 'ENDED', 'There are {} workflows what contain requested value'.format( len(matched_workflow)), context, True)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() ret = MSA_API.process_content('ENDED', f'Anisble playbook service deleted', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order dev_var = Variables() context = Variables.task_call() # (3) policy try: order = Order(context["left_device_id"]) order.command_execute("CREATE", context["sdwan_ipsec_conf_left"]) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) try: order = Order(context["right_device_id"]) order.command_execute('CREATE', context["sdwan_ipsec_conf_right"]) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) ret = MSA_API.process_content('ENDED', f'IPsec Policy Created.', context, True)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API context = Variables.task_call() ret = MSA_API.process_content('ENDED', f'workflow removed', context, True) print(ret)
if __name__ == "__main__": try: one = AZConnection(client_id=context['client_id'], client_secret=context['client_secret'], subscription_id=context['subscription_id'], tenant_id=context['tenant_id'], resource_group=context['resource_group'], location=context['location']) vm_id_list = [] except ConnectionError: ret = MSA_API.process_content( 'WARNING', f'AZConnection - Connection Error - Check Internet', context, True) print(ret) exit() except HTTPError: ret = MSA_API.process_content( 'WARNING', f'AZConnection - HTTP Error - Check API', context, True) print(ret) exit() try: for i in range(int(context['vm_qty'])): num = i + 1 vmname = context['vm_name'] + '-' + str(num) vm = one.vm_create(vm_name=vmname, vmSize=context['vmSize'],
import json from msa_sdk.lookup import Lookup from msa_sdk.device import Device from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() # prepare device list, by id 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) me_list_deleted = [] try: for me in device_list: Device(device_id=me['id']).delete() me_list_deleted.append(me['name']) if len(me_list_deleted) == 0: me_list_deleted.append('...nothing to delete...') ret = MSA_API.process_content( 'ENDED', f'Next devices were deleted: {me_list_deleted}', context, True) print(ret) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret)
url, headers=headers, data=payload, verify=False) return response if __name__ == "__main__": try: one = MSAConnect(context['msa_fqdn'], context['msa_user'], context['msa_pass']) if isinstance(one.token, tuple): ret = MSA_API.process_content( 'WARNING', f'Can\'t get MSA token {one.token[1]}', context, True) print(ret) exit() except HTTPError as http_err: ret = MSA_API.process_content('WARNING', f'HTTP error occured: {http_err}', context, True) print(ret) exit() entity = Device(device_id=context['k8s_device'][3:]) try: one.set_params(str(entity.device_id), 'KUBE_TOKEN', context["k8s_token"])
# (1) remove node with k8s_delete_node ms / primary master k8s_delete_node_data = { "object_id": "123", "node_name": node_name, } k8s_delete_node_ms = {"k8s_delete_node": {"123": k8s_delete_node_data}} order = Order(master_prim) order.command_execute('CREATE', k8s_delete_node_ms, timeout=300) if __name__ == "__main__": if int(context["scale_lvl"]) >= 0: ret = MSA_API.process_content('ENDED', f'Scale-out in process. Skipping.', context, True) print(ret) exit() # from low to high index stop = int(context['vm_index']) + 1 start = stop + int(context['scale_lvl']) # 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)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() ret = MSA_API.process_content('ENDED', f'Firewall service deleted', context, True) print(ret)
def get_status_loop(self, rs_id, api_ver, stop=120): counter = 0 while counter < stop: status = self.get_resource_status(rs_id, api_ver) if status == 'Succeeded': break else: time.sleep(2) counter = counter + 2 if __name__ == "__main__": if int(context["scale_lvl"]) <= 0: ret = MSA_API.process_content('ENDED', f'Scale-in completed. Skipping.', context, True) print(ret) exit() try: one = AZConnection(client_id=context['client_id'], client_secret=context['client_secret'], subscription_id=context['subscription_id'], tenant_id=context['tenant_id'], resource_group=context['resource_group'], location=context['location']) start = int(context['vm_index']) + 1 stop = start + int(context['scale_lvl'])
"ips": "true", "content_awareness": "true", "url_filtering": "true", "anti_virus": "true", "anti_bot": "true", "anti_spam": "true", "threat_emulation": "true", "threat_extraction": "true" } gateway = {"Gateway": {object_id: micro_service_vars_array}} # call the CREATE for simple_firewall MS for each device order = Order(devicelongid) order.command_execute('UPDATE', gateway) # convert dict object into json content = json.loads(order.content) # check if the response is OK if order.response.ok: ret = MSA_API.process_content( 'ENDED', f'STATUS: {content["status"]}, \ MESSAGE: Profile {profile}', context, True) else: ret = MSA_API.process_content( 'FAILED', f'Gateway update failed \ - {order.content}', context, True) print(ret)
# convert dict object into json content = json.loads(order.content) # check if the response is OK if order.response.ok: if 'rules' in context.keys(): num = len(context['rules']) else: context['rules'] = {} num = 0 context['rules'][num] = {} context['rules'][num]['delete'] = False context['rules'][num]['id'] = context['id'] context['rules'][num]['src_ip'] = context['src_ip'] context['rules'][num]['dst_port'] = context['dst_port'] ret = MSA_API.process_content('ENDED', f'STATUS: {content["status"]}, \ MESSAGE: {content["message"]}', context, True) else: ret = MSA_API.process_content('FAILED', f'Policy update failed \ - {order.content}', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('device', var_type='Device') context = Variables.task_call(dev_var) ret = MSA_API.process_content( 'ENDED', f'Anisble playbook service created. Managed Entity: {context["device"]}', context, True) print(ret)
""" The proposals of the task are: - Retrive variables from customer; - Retrieve microservice variables from file - Put the variables to context """ #New Variables object TaskVariables = Variables() #Add new variables TaskVariables.add('customer_name', var_type = 'String') TaskVariables.add('ipam_device_id', var_type = 'Device') #Add vars to context context = Variables.task_call(TaskVariables) context['ipam_device_id'] = re.match('^\D+?(\d+?)$', context['ipam_device_id']).group(1) #Import microservice alias list with open('/opt/fmc_repository/Process/General_Network_Service_Automation/microservices_list.json', 'r') as alias_file: context['ipam_ms_aliases'] = json.load(alias_file) #Finish the task correctlly result = MSA_API.process_content('ENDED', 'All variables have been defined successfully', context, True) print(result)
i = 0 for me in context["k8s_master"]: i += 1 Device(device_id=me['host'][-4:]).name = "k8s-master-0" + str(i) Device(device_id=context['proxy_host'][-4:]).name += "[proxy]" ''' dev_var = Variables() context = Variables.task_call() cust_ref = context["UBIQUBEID"] # prepare configuration where to install loadbalancer search = Lookup() search.look_list_device_by_customer_ref(cust_ref) device_list = search.content device_list = json.loads(device_list) # stub for load-balancer node num.3 for me in device_list: if me['name'] == context['vm_name'] + '-3': context['proxy_host'] = me['externalReference'] break context['proxy_type'] = 'haproxy' ret = MSA_API.process_content('ENDED', f'Haproxy package to install on {context["vm_name"]}-3', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order dev_var = Variables() context = Variables.task_call() try: order = Order(context['short_device_id']) order.command_execute( 'DELETE', {"sdwan_ipsec_start": context['ms_sdwan_ipsec_start']}) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) ret = MSA_API.process_content('ENDED', f'Take IPsec control.', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API context = Variables.task_call() ret = MSA_API.process_content('ENDED', f'workflow instance deleted', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('device', var_type='Device') context = Variables.task_call(dev_var) ret = MSA_API.process_content('ENDED', f'Firewall service created. Managed Entity: {context["device"]}', context, True) print(ret)
import random import time from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order context = Variables.task_call() device_id_list = context["device_id_list"] ms_vars_dict_list = context["ms_vars_dict_list"] def rand_int(): return ''.join(random.choice('0123456789') for i in range(8)) for device in device_id_list.values(): for ms_var_dict in ms_vars_dict_list.values(): Order(device).command_execute('CREATE', {'k8s_pods': { rand_int(): ms_var_dict }}) time.sleep(3 * int(context['packet_count'])) # ret = MSA_API.process_content('ENDED', f'PODs have been created', context, True) ret = MSA_API.process_content('ENDED', f'PODs have been created', context, True) print(ret)
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() # worker list hardcoded worker_id_list = context['vm_id_list_new'] # kubeadm loop on workers Orchestration.update_asynchronous_task_details(*async_update_list, f'Worker nodes processing...') for me in worker_id_list: try: order = Order(str(me)) order.command_execute('CREATE', context['k8s_join_worker'], timeout=300) except Exception as e:
from msa_sdk.msa_api import MSA_API context = Variables.task_call() ms_vars_dict_list = [] device_ip_list = context["device_ip_list"] ''' Generate data in format. ms_vars_dict = {"namespace": , "pod_name": , "container_name": , "remote_ip": } ''' for ip in device_ip_list.values(): ms_vars_dict = { "namespace": context['namespace'], "pod_name": ip.replace(".", "-"), "container_name": ip.replace(".", "-"), "remote_ip": ip, "packet_size": context['packet_size'], "packet_count": context['packet_count'] } ms_vars_dict_list.append(ms_vars_dict) context['ms_vars_dict_list'] = ms_vars_dict_list ret = MSA_API.process_content('ENDED', f'DATA {context["ms_vars_dict_list"]}', context, True) print(ret)
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) except Exception as e: ret = MSA_API.process_content('FAILED', f'ERROR: {str(e)}', context, True) print(ret) if 'message' in data.keys(): container_list = json.loads(data['message'])['k8_pods_list'].keys() else: container_list = [] if 'nginx' in container_list: Orchestration.update_asynchronous_task_details( *async_update_list, f'Undefined resource found: nginx') context['wf_name'] = 'WARNING' ret = MSA_API.process_content('WARNING', f'Undefined resource found - POD: nginx', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() context = Variables.task_call() ret = MSA_API.process_content('ENDED', 'SERVICE INSTANCE REMOVED', context, True) print(ret)