def test_variable_already_defined(): """ Test check if variable is defined """ with pytest.raises(VariableExistsException): variables = Variables() variables.add('Var1') variables.add('Var1')
def test_get_definition(): """ Test get vars definition """ variables = Variables() result_vars = [{ 'name': 'Var1', 'type': 'String', 'values': "", 'default_value': None }, { 'name': 'Var2', 'type': 'Int', 'values': "", 'default_value': None }, { 'name': 'Var3', 'type': 'String', 'values': ['v1', 'v2'], 'default_value': None }] variables.add('Var1') variables.add('Var2', 'Int') variables.add('Var3', values=['v1', 'v2']) assert variables.vars_definition() == json.dumps(result_vars)
def test_create_var_type(): """ Test create var with a type """ variables = Variables() variables.add('Var2', 'Int') assert len(variables.all) == 1 assert variables.all[0].name == 'Var2' assert variables.all[0].var_type == 'Int' assert not variables.all[0].required
def test_create_vars(): """ Test create vars with one object """ variables = Variables() variables.add('Var1') assert len(variables.all) == 1 assert variables.all[0].name == 'Var1' assert variables.all[0].var_type == 'String' assert variables.all[0].values == "" assert variables.all[0].default_value is None assert not variables.all[0].required
def test_task_call_execute(tmpdir): """ Test task call for execute """ f_content = ('{"manufacturer_id": "1",' '"password": "******",' '"password_admin": "cisco",' '"managed_device_name": "ASA",' '"model_id": "15010202",' '"customer_id": "34604",' '"device_ip_address": "10.30.18.10",' '"login": "******",' '"undefined": "",' '"service_id": "5529",' '"SERVICEINSTANCEID": "5529",' '"EXECNUMBER": "1",' '"PROCESSINSTANCEID": "214241",' '"UBIQUBEID": "RKAA34604",' '"SERVICEINSTANCEREFERENCE": "RKASID5529",' '"TASKID": "1",' '"TASKINSTANCEID": "371002"}') f_name = tmpdir.mkdir('temp_file').join('context.json') with open(f_name, 'w+') as t_file: t_file.write(f_content) t_file.close() test_args = ['task.py', '--execute', f_name] with patch.object(sys, 'argv', test_args): assert Variables().task_call() == json.loads(f_content)
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 __init__(self): """Initialize.""" self.url = 'http://{}:{}/ubi-api-rest'.format(*host_port()) self._token = Variables.task_call()['TOKEN'] self.path = "" self.response = None self.log_response = True self._content = "" self.action = self.__class__
def test_task_call_wrong_parameter(): """ Test task call to return var definitions """ test_args = ['prog', 'task.py', '--something_else'] with patch.object(sys, 'argv', test_args): caputure_output = io.StringIO() sys.stdout = caputure_output variables = Variables() variables.add('Var1') variables.add('Var2') Variables().task_call(variables) sys.stdout = sys.__stdout__ assert caputure_output.getvalue() == ''
def test_var_mandatory_success(): """ Test var mandatory """ variables = Variables() variables.add('Var1') variables.add('Var2', required=True) context = {'Var2': 'value2'} variables.check_mandatory_param(context)
def test_task_call_no_var_obj(): """ Test task call to return var definitions """ test_args = ['task.py', '--get_vars_definition'] with patch.object(sys, 'argv', test_args): caputure_output = io.StringIO() sys.stdout = caputure_output variables = Variables() variables.add('Var1') variables.add('Var2') with pytest.raises(SystemExit): Variables().task_call() sys.stdout = sys.__stdout__ assert caputure_output.getvalue() == "[{}]"
def test_var_mandatory_fail(): """ Test var mandatory """ with pytest.raises(VariableMandatoryException): variables = Variables() variables.add('Var1') variables.add('Var2', required=True) context = {'Var1': 'value1'} variables.check_mandatory_param(context)
def test_create_many_vars(): """ Test create many vars """ variables = Variables() variables.add('Var1') variables.add('Var2', 'Int') variables.add('Var3', values=['v1', 'v2']) assert len(variables.all) == 3 assert variables.all[0].name == 'Var1' assert variables.all[1].name == 'Var2' assert variables.all[1].var_type == 'Int' assert variables.all[2].name == 'Var3' assert variables.all[2].var_type == 'String' assert variables.all[2].values == ['v1', 'v2']
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('id', var_type='Integer') dev_var.add('src_ip', var_type='String') dev_var.add('dst_port', var_type='Integer') # port code from # https://github.com/openmsa/Workflows/blob/master/Tutorials/php/Simple_Firewall/Add_filter_Rule_add_rule.php ret = MSA_API.process_content('ENDED', 'port/IP blocked', context, True) print(ret)
''' from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API ''' List all the parameters required by the task You can use var_name convention for your variables They will display automaticaly as "Var Name" The allowed types are: 'String', 'Boolean', 'Integer', 'Password', 'IpAddress', 'IpMask', 'Ipv6Address', 'Composite', 'OBMFRef', 'Device' Add as many variables as needed ''' dev_var = Variables() dev_var.add('var_name', var_type='String') dev_var.add('var_name2', var_type='Integer') ''' context => Service Context variable per Service Instance All the user-inputs of Tasks are automatically stored in context Also, any new variables should be stored in context which are used across Service Instance The variables stored in context can be used across all the Tasks and Processes of a particular Service Update context array [add/update/delete variables] as per requirement ENTER YOUR CODE HERE ''' context = Variables.task_call(dev_var) context['var_name2'] = int(context['var_name2']) + 1
import json from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.lookup import Lookup from msa_sdk.device import Device dev_var = Variables() dev_var.add('subtenant', var_type='Customer') dev_var.add('namespace', var_type='String') context = Variables.task_call(dev_var) if "_" in context['namespace']: context['namespace'].replace("_", "-") device_id_list = [] device_ip_list = [] search = Lookup() search.look_list_device_by_customer_ref(context['subtenant']) device_list = search.content.decode() device_list = json.loads(device_list) for device in device_list: device_id_list.append(device['id']) device_ip_list.append(Device(device_id=device['id']).management_address) context['device_ip_list'] = device_ip_list context['device_id_list'] = device_id_list ret = MSA_API.process_content( 'ENDED', f'workflow initialised {context["device_ip_list"]}', context,
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order dev_var = Variables() dev_var.add('id', var_type='Integer') dev_var.add('device_id', var_type='Device') context = Variables.task_call(dev_var) short_device_id = context['device_id'][-3:] context['short_device_id'] = short_device_id ms_sdwan_ipsec_start = {context['id']: {"object_id": context['id']}} context['ms_sdwan_ipsec_start'] = ms_sdwan_ipsec_start try: order = Order(context['short_device_id']) order.command_execute('CREATE', {"sdwan_ipsec_start": 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)
import json from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order dev_var = Variables() dev_var.add('device', var_type='Device') dev_var.add('gateway', var_type='String') dev_var.add('ip_address', var_type='String') dev_var.add('profile', var_type='String') context = Variables.task_call(dev_var) context['service_id_display'] = f'{context["SERVICEINSTANCEID"]}' # read the ID of the selected managed entity device_id = context['device'] object_id = context['gateway'] ip_address = context['ip_address'] profile = context['profile'] # extract the database ID devicelongid = device_id[3:] # build the Microservice JSON params for the CREATE #{"Gateway":{"undefined":{"name":"hgu001","ipv4_address":"1.1.1.1","firewall":true,"vpn":true}}} micro_service_vars_array = { "object_id": object_id, "ip_address": ip_address, "firewall": "true",
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 json import uuid import os import errno import sys import base64 from msa_sdk import constants from msa_sdk.order import Order from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('nsd_name', var_type='String') dev_var.add('nsd_contents', var_type='String') context = Variables.task_call(dev_var) #get uuid from context. uuid_gen = context.get('uuid_gen') nsd_name = uuid_gen if 'nsd_name' in context: name = context.get('nsd_name') if name: nsd_name = name + '_' + uuid_gen filename = '/opt/fmc_repository/Datafiles/NFV/NSD/' + nsd_name + '/Definition/' + nsd_name + '.yaml' #get VNFD contents from input variable. nsd_contents = '' if 'nsd_contents' in context: nsd_contents = context.get('nsd_contents')
import json from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.lookup import Lookup from msa_sdk.device import Device dev_var = Variables() dev_var.add('subtenant', var_type='Customer') dev_var.add('namespace', var_type='String') dev_var.add('packet_size', var_type='Integer') dev_var.add('packet_count', var_type='Integer') dev_var.add('app_name', var_type='String') context = Variables.task_call(dev_var) device_id_list = [] device_ip_list = [] search = Lookup() search.look_list_device_by_customer_ref(context['subtenant']) device_list = search.content.decode() device_list = json.loads(device_list) for device in device_list: device_id_list.append(device['id']) device_ip_list.append(Device(device_id=device['id']).management_address) context['device_ip_list'] = device_ip_list context['device_id_list'] = device_id_list ret = MSA_API.process_content('ENDED', f'workflow initialised {context["device_ip_list"]}', context, True) print(ret)
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() # Global dev_var.add('tenant_id', var_type='String') dev_var.add('client_id', var_type='String') dev_var.add('client_secret', var_type='Password') dev_var.add('subscription_id', var_type='String') dev_var.add('resource_group', var_type='String') dev_var.add('location', var_type='String') # Security Group dev_var.add('sec_gr_name', var_type='String') dev_var.add('rule_name', var_type='String') dev_var.add('priority', var_type='String') dev_var.add('permit_ip_addr', var_type='String') dev_var.add('permit_proto', var_type='String') dev_var.add('permit_port', var_type='String') # Virtual Network dev_var.add('virt_net_name', var_type='String') dev_var.add('virt_net_ip_prefix', var_type='String') # Subnet dev_var.add('subnet_name', var_type='String') dev_var.add('subnet_ip_prefix', var_type='String') # Public IP dev_var.add('public_ip_name', var_type='String') dev_var.add('vm_label', var_type='String') # NIC dev_var.add('net_iface_name', var_type='String') # VM dev_var.add('vm_name', var_type='String')
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() dev_var.add('new_sec_gr_name', var_type='String') dev_var.add('new_sec_rule_name', var_type='String') dev_var.add('new_ip_prefix', var_type='String') dev_var.add('sec_rule_action', 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)
import json from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API from msa_sdk.order import Order # List all the parameters required by the task dev_var = Variables() dev_var.add('profile', var_type='String') #dev_var.add('gateway', var_type='String') context = Variables.task_call(dev_var) # read the ID of the selected managed entity device_id = context['device'] object_id = context['gateway'] profile = context['profile'] # extract the database ID devicelongid = device_id[3:] # build the Microservice JSON params for IMPORT #{"Gateway":"0"} #micro_service_vars_array = {"object_id":object_id} gateway = {"Gateway": "0"} # call the CREATE for simple_firewall MS for each device order = Order(devicelongid) order.command_execute('IMPORT', gateway) # convert dict object into json content = json.loads(order.content)
from msa_sdk.device import Device from msa_sdk.variables import Variables context = Variables.task_call() new_device = Device(device_id=context['device_id']) new_device.initial_provisioning() print( new_device.process_content( 'ENDED', 'Device: ' + str(new_device.device_id) + ' provisioned successfully', context, True))
from msa_sdk.variables import Variables from msa_sdk.msa_api import MSA_API dev_var = Variables() dev_var.add('msa_fqdn', var_type='String') dev_var.add('msa_user', var_type='String') dev_var.add('msa_pass', var_type='Password') dev_var.add('k8s_device', var_type='Device') dev_var.add('k8s_port', var_type='String') dev_var.add('k8s_token', var_type='Password') context = Variables.task_call(dev_var) if __name__ == "__main__": ret = MSA_API.process_content('ENDED', 'Task OK', context, True) print(ret)
import time """ The proposals of the tasks are: - Check whether is the customer defined in IPAM system; - Retrive usefull infomration about the customer: - Sites; - Devices - Put information in context as customer_details (dict) """ #Create Variables() object and retrieve useful variables TaskVariables = Variables() context = Variables.task_call(TaskVariables) 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}"}}'
import json from msa_sdk.variables import Variables from msa_sdk.order import Order # List all the parameters required by the task dev_var = Variables() dev_var.add('src_ip', var_type='String') dev_var.add('dst_port', var_type='Integer') context = Variables.task_call(dev_var) # read the ID of the selected managed entity device_id = context['device'] # extract the database ID devicelongid = device_id[-3:] # build the Microservice JSON params for the CREATE micro_service_vars_array = { "playbook_path": "/opt/playbooks/linux_firewall_creation.yml", "extra_vars": "\"dport=" + context['dst_port'] + " ip=" + context['src_ip'] + "\"" } playbook = {"AnsiblePlaybook": {"": micro_service_vars_array}} # call the CREATE for simple_firewall MS for each device order = Order(devicelongid) order.command_execute('CREATE', playbook) # convert dict object into json content = json.loads(order.content)
import sys import os """ NEW The proposals of the task are: - Identify site ASN - Identify site prefixes and IP addresses - Identify PE and CE devices """ #New Variables object TaskVariables = Variables() #Add new variables TaskVariables.add('site', var_type = 'String') #Add vars to context context = Variables.task_call(TaskVariables) process_id = context['SERVICEINSTANCEID'] ipam_device_id = context['ipam_device_id'] customer_vrf = context['customer_details']['vrf'] customer_name = context['customer_name'] site = context['site'] ms_ipam_tenant = context['ipam_ms_aliases']['IPAM Tenants'] ms_ipam_site = context['ipam_ms_aliases']['IPAM Sites']
from msa_sdk import lookup from msa_sdk import util import ipaddress import time import re import json import sys import os """ The proposals of the task are: - Monitor IP address availability by simple ICMP echo - Finish sucessfully in case if the IP address is available """ #New Variables object TaskVariables = Variables() #Add new variables TaskVariables.add('ip_address', var_type='String') TaskVariables.add('hostname', var_type='String') TaskVariables.add('vlan_list.0.id', var_type='String') TaskVariables.add('vlan_list.0.name', var_type='String') TaskVariables.add('trunk_port', var_type='String') TaskVariables.add('ipam_device', var_type='Device') TaskVariables.add('site', var_type='String') TaskVariables.add('use_ipam', var_type='String') #Add vars to context context = Variables.task_call(TaskVariables) #Import microservice alias list with open(