Example #1
0
def test_variable_already_defined():
    """
    Test check if variable is defined
    """
    with pytest.raises(VariableExistsException):
        variables = Variables()

        variables.add('Var1')
        variables.add('Var1')
Example #2
0
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)
Example #3
0
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
Example #4
0
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
Example #5
0
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)
Example #6
0
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
Example #7
0
    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__
Example #8
0
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() == ''
Example #9
0
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)
Example #10
0
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() == "[{}]"
Example #11
0
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)
Example #12
0
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)
Example #14
0
'''
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
Example #15
0
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)
Example #17
0
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",
Example #18
0
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 + \
Example #19
0
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 + \
Example #20
0
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')
Example #21
0
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')
Example #23
0
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)
Example #24
0
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)
Example #25
0
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}"}}'
Example #28
0
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)
Example #29
0
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(