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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #14
0
                                    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"])
Exemple #15
0
    # (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)
Exemple #16
0
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'])
Exemple #18
0
        "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)
Exemple #22
0
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)