diff --git a/Ansible_integration/Ansible_Integration/.Ansible_integration.xml.swp b/Ansible_integration/Ansible_Integration/.Ansible_integration.xml.swp new file mode 100644 index 000000000..ceb79e619 Binary files /dev/null and b/Ansible_integration/Ansible_Integration/.Ansible_integration.xml.swp differ diff --git a/Ansible_integration/.meta_Ansible_integration.xml b/Ansible_integration/Ansible_Integration/.meta_Ansible_integration.xml similarity index 80% rename from Ansible_integration/.meta_Ansible_integration.xml rename to Ansible_integration/Ansible_Integration/.meta_Ansible_integration.xml index 8e4749551..e966bd675 100755 --- a/Ansible_integration/.meta_Ansible_integration.xml +++ b/Ansible_integration/Ansible_Integration/.meta_Ansible_integration.xml @@ -1,9 +1,13 @@ + + DISPLAYNAME + Ansible_integration.xml + DATE_MODIFICATION - 1602507813168 + 1615238318202 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1602507813164 + 1615238318193 MODEL diff --git a/Ansible_integration/Ansible_Integration/.meta_Connect_to_Ansible_host_Defince_variables.php b/Ansible_integration/Ansible_Integration/.meta_Connect_to_Ansible_host_Defince_variables.php new file mode 100755 index 000000000..1f51ad479 --- /dev/null +++ b/Ansible_integration/Ansible_Integration/.meta_Connect_to_Ansible_host_Defince_variables.php @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Connect_to_Ansible_host_Defince_variables.php + + + DATE_MODIFICATION + 1614494024811 + + + REPOSITORY + Process + + + DATE_CREATION + 1613157068143 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Connect_to_Ansible_host_Retrieve_playbook_list.php b/Ansible_integration/Ansible_Integration/.meta_Connect_to_Ansible_host_Retrieve_playbook_list.php similarity index 100% rename from Ansible_integration/.meta_Connect_to_Ansible_host_Retrieve_playbook_list.php rename to Ansible_integration/Ansible_Integration/.meta_Connect_to_Ansible_host_Retrieve_playbook_list.php diff --git a/Ansible_integration/.meta_Create_integration_Define_vars.php b/Ansible_integration/Ansible_Integration/.meta_Create_integration_Define_vars.php similarity index 100% rename from Ansible_integration/.meta_Create_integration_Define_vars.php rename to Ansible_integration/Ansible_Integration/.meta_Create_integration_Define_vars.php diff --git a/Ansible_integration/.meta_Create_integration_Retrieve_playbook_files_list.php b/Ansible_integration/Ansible_Integration/.meta_Create_integration_Retrieve_playbook_files_list.php similarity index 100% rename from Ansible_integration/.meta_Create_integration_Retrieve_playbook_files_list.php rename to Ansible_integration/Ansible_Integration/.meta_Create_integration_Retrieve_playbook_files_list.php diff --git a/Ansible_integration/.meta_Create_integration_Retrive_playbook_list.php b/Ansible_integration/Ansible_Integration/.meta_Create_integration_Retrive_playbook_list.php similarity index 100% rename from Ansible_integration/.meta_Create_integration_Retrive_playbook_list.php rename to Ansible_integration/Ansible_Integration/.meta_Create_integration_Retrive_playbook_list.php diff --git a/Ansible_integration/.meta_Create_microservice_Add_microservice_to_deployment_settings.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Add_microservice_to_deployment_settings.php similarity index 100% rename from Ansible_integration/.meta_Create_microservice_Add_microservice_to_deployment_settings.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservice_Add_microservice_to_deployment_settings.php diff --git a/Ansible_integration/.meta_Create_microservice_Create_microservice.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_microservice.php similarity index 100% rename from Ansible_integration/.meta_Create_microservice_Create_microservice.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_microservice.php diff --git a/Ansible_integration/.meta_Create_microservice_Create_microservice_file.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_microservice_file.php similarity index 79% rename from Ansible_integration/.meta_Create_microservice_Create_microservice_file.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_microservice_file.php index c07db45b6..416aa39a1 100755 --- a/Ansible_integration/.meta_Create_microservice_Create_microservice_file.php +++ b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_microservice_file.php @@ -1,9 +1,13 @@ + + DISPLAYNAME + Create_microservice_Create_microservice_file.php + DATE_MODIFICATION - 1601381951271 + 1614534498700 REPOSITORY diff --git a/Ansible_integration/.meta_Create_microservice_Create_new_microservice.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_new_microservice.php similarity index 100% rename from Ansible_integration/.meta_Create_microservice_Create_new_microservice.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_new_microservice.php diff --git a/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_playbook_microservice.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_playbook_microservice.php new file mode 100755 index 000000000..08dc9194f --- /dev/null +++ b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Create_playbook_microservice.php @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Create_microservice_Create_playbook_microservice.php + + + DATE_MODIFICATION + 1614494969309 + + + REPOSITORY + Process + + + DATE_CREATION + 1613814631165 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservice_Extract_playbook_variables.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Extract_playbook_variables.php similarity index 79% rename from Ansible_integration/.meta_Create_microservice_Extract_playbook_variables.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservice_Extract_playbook_variables.php index c287eb61c..8366aa19e 100755 --- a/Ansible_integration/.meta_Create_microservice_Extract_playbook_variables.php +++ b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Extract_playbook_variables.php @@ -1,9 +1,13 @@ + + DISPLAYNAME + Create_microservice_Extract_playbook_variables.php + DATE_MODIFICATION - 1597304212058 + 1614494932369 REPOSITORY diff --git a/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Modify_microservice_to_read_.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Modify_microservice_to_read_.php new file mode 100755 index 000000000..788353146 --- /dev/null +++ b/Ansible_integration/Ansible_Integration/.meta_Create_microservice_Modify_microservice_to_read_.php @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Create_microservice_Modify_microservice_to_read_.php + + + DATE_MODIFICATION + 1615232136600 + + + REPOSITORY + Process + + + DATE_CREATION + 1615232136594 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php similarity index 100% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Create_microservices.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Create_microservices.php similarity index 100% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__Create_microservices.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Create_microservices.php diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Extract_playbook_variables.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Extract_playbook_variables.php similarity index 100% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__Extract_playbook_variables.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Extract_playbook_variables.php diff --git a/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php new file mode 100755 index 000000000..003a7bccd --- /dev/null +++ b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Create_microservices__Bulk_mode__Monitor_changes.php + + + DATE_MODIFICATION + 1615232282572 + + + REPOSITORY + Process + + + DATE_CREATION + 1615232282560 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Monitor_playbook_changes.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Monitor_playbook_changes.php similarity index 100% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__Monitor_playbook_changes.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__Monitor_playbook_changes.php diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__TEMP.php b/Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__TEMP.php similarity index 100% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__TEMP.php rename to Ansible_integration/Ansible_Integration/.meta_Create_microservices__Bulk_mode__TEMP.php diff --git a/Ansible_integration/.meta_Import_specific_playbooks_Create_microservices.php b/Ansible_integration/Ansible_Integration/.meta_Import_specific_playbooks_Create_microservices.php similarity index 100% rename from Ansible_integration/.meta_Import_specific_playbooks_Create_microservices.php rename to Ansible_integration/Ansible_Integration/.meta_Import_specific_playbooks_Create_microservices.php diff --git a/Ansible_integration/.meta_Import_specific_playbooks_Monitor_changes.php b/Ansible_integration/Ansible_Integration/.meta_Import_specific_playbooks_Monitor_changes.php similarity index 74% rename from Ansible_integration/.meta_Import_specific_playbooks_Monitor_changes.php rename to Ansible_integration/Ansible_Integration/.meta_Import_specific_playbooks_Monitor_changes.php index 3ef3f35de..5a2a309a2 100755 --- a/Ansible_integration/.meta_Import_specific_playbooks_Monitor_changes.php +++ b/Ansible_integration/Ansible_Integration/.meta_Import_specific_playbooks_Monitor_changes.php @@ -1,9 +1,13 @@ + + DISPLAYNAME + Import_specific_playbooks_Monitor_changes.php + DATE_MODIFICATION - 1602507073446 + 1615232290794 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1602507073440 + 1615232290790 TAG diff --git a/Ansible_integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php b/Ansible_integration/Ansible_Integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php similarity index 74% rename from Ansible_integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php rename to Ansible_integration/Ansible_Integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php index ac757c11d..76ac0474b 100755 --- a/Ansible_integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php +++ b/Ansible_integration/Ansible_Integration/.meta_Stop_playbook_monitoring_Stop_monitoring.php @@ -1,9 +1,13 @@ + + DISPLAYNAME + Stop_playbook_monitoring_Stop_monitoring.php + DATE_MODIFICATION - 1601378494837 + 1613814734824 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1601378494831 + 1613814734819 TAG diff --git a/Ansible_integration/.meta_TEST_Create_MS.php b/Ansible_integration/Ansible_Integration/.meta_TEST_Create_MS.php similarity index 100% rename from Ansible_integration/.meta_TEST_Create_MS.php rename to Ansible_integration/Ansible_Integration/.meta_TEST_Create_MS.php diff --git a/Ansible_integration/Ansible_integration.xml b/Ansible_integration/Ansible_Integration/Ansible_integration.xml similarity index 76% rename from Ansible_integration/Ansible_integration.xml rename to Ansible_integration/Ansible_Integration/Ansible_integration.xml index 64ec246da..91627f64f 100755 --- a/Ansible_integration/Ansible_integration.xml +++ b/Ansible_integration/Ansible_Integration/Ansible_integration.xml @@ -1,11 +1,11 @@ - + - + - CommandDefinition/ANSIBLE/Retrieve_playbook_files_list.xml + Retrieve_playbook_files_list @@ -13,88 +13,104 @@ - + CommandDefinition/ANSIBLE/Retrieve_playbook_files_list.xml + + Retrive playbook list from Ansible server CREATE 5 + - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Defince variables - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Retrieve playbook list + + /opt/fmc_repository/Process/_TEST_Ansible_integration/Connect_to_Ansible_host/Tasks + Retrieve host list + DELETE DELETE 5 + Import a playbook UPDATE 5 + - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Modify microservice to read - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Extract playbook variables - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Create playbook microservice - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Create microservice file - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Add microservice to deployment settings + + /opt/fmc_repository/Process/_TEST_Ansible_integration/Create_microservice/Tasks + Update default values + - + Import specific playbooks UPDATE 5 + - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Create microservices - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Monitor changes - + Import all playbooks UPDATE 5 + - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Create microservices - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Monitor changes - + Stop playbook monitoring UPDATE 5 + - /opt/fmc_repository/Process/Ansible_integration + /opt/fmc_repository/Process/Ansible_integration/Ansible_Integration Stop monitoring @@ -106,6 +122,6 @@ 10000 5 Ansible integration - + ANSIBLE|DEMO diff --git a/Ansible_integration/Connect_to_Ansible_host_Defince_variables.php b/Ansible_integration/Ansible_Integration/Connect_to_Ansible_host_Defince_variables.php similarity index 73% rename from Ansible_integration/Connect_to_Ansible_host_Defince_variables.php rename to Ansible_integration/Ansible_Integration/Connect_to_Ansible_host_Defince_variables.php index 25aad4458..7ca71224c 100755 --- a/Ansible_integration/Connect_to_Ansible_host_Defince_variables.php +++ b/Ansible_integration/Ansible_Integration/Connect_to_Ansible_host_Defince_variables.php @@ -10,22 +10,28 @@ function list_args() create_var_def('playbook_path', 'String'); create_var_def('microservice_skeleton', 'String'); create_var_def('microservice_dir', 'String'); + create_var_def('do_import_hosts', 'Boolean'); } check_mandatory_param('device_id'); check_mandatory_param('playbook_path'); check_mandatory_param('microservice_skeleton'); check_mandatory_param('microservice_dir'); +check_mandatory_param('do_import_hosts'); //Gather Device ID (numeric) from procvided ID preg_match("/\S*?(?\d+?)$/", $context['device_id'], $matches); $context['device_id'] = $matches['device_id']; +$context['linux_model_id'] = '14020601'; +$context['linux_manufacturer_id'] = '14020601'; +$context['linux_profile_name'] = 'bash_profile'; $announce = update_asynchronous_task_details($context, "Identifying variables... "); //Define variables what will be written to created microservice file $context['microservice_variables'] = array( 'var_object_id' => ' ', -'var_playbook_path' => ' ' +'var_playbook_path' => ' ', +'var_ansible_hosts' => ' ' ); //Define path to MS to read playbook content. THE MICROSERVICE SHOULD BE ATTACHED TO ANSIBLE ME DEPLOYMENT SETTINGS diff --git a/Ansible_integration/Connect_to_Ansible_host_Retrieve_playbook_list.php b/Ansible_integration/Ansible_Integration/Connect_to_Ansible_host_Retrieve_playbook_list.php similarity index 100% rename from Ansible_integration/Connect_to_Ansible_host_Retrieve_playbook_list.php rename to Ansible_integration/Ansible_Integration/Connect_to_Ansible_host_Retrieve_playbook_list.php diff --git a/Ansible_integration/Create_integration_Define_vars.php b/Ansible_integration/Ansible_Integration/Create_integration_Define_vars.php similarity index 100% rename from Ansible_integration/Create_integration_Define_vars.php rename to Ansible_integration/Ansible_Integration/Create_integration_Define_vars.php diff --git a/Ansible_integration/Create_integration_Retrieve_playbook_files_list.php b/Ansible_integration/Ansible_Integration/Create_integration_Retrieve_playbook_files_list.php similarity index 100% rename from Ansible_integration/Create_integration_Retrieve_playbook_files_list.php rename to Ansible_integration/Ansible_Integration/Create_integration_Retrieve_playbook_files_list.php diff --git a/Ansible_integration/Create_integration_Retrive_playbook_list.php b/Ansible_integration/Ansible_Integration/Create_integration_Retrive_playbook_list.php similarity index 100% rename from Ansible_integration/Create_integration_Retrive_playbook_list.php rename to Ansible_integration/Ansible_Integration/Create_integration_Retrive_playbook_list.php diff --git a/Ansible_integration/Create_microservice_Add_microservice_to_deployment_settings.php b/Ansible_integration/Ansible_Integration/Create_microservice_Add_microservice_to_deployment_settings.php similarity index 100% rename from Ansible_integration/Create_microservice_Add_microservice_to_deployment_settings.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Add_microservice_to_deployment_settings.php diff --git a/Ansible_integration/Create_microservice_Create_microservice.php b/Ansible_integration/Ansible_Integration/Create_microservice_Create_microservice.php similarity index 100% rename from Ansible_integration/Create_microservice_Create_microservice.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Create_microservice.php diff --git a/Ansible_integration/Create_microservice_Create_microservice_file.php b/Ansible_integration/Ansible_Integration/Create_microservice_Create_microservice_file.php similarity index 96% rename from Ansible_integration/Create_microservice_Create_microservice_file.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Create_microservice_file.php index f4068edeb..c319c0f18 100755 --- a/Ansible_integration/Create_microservice_Create_microservice_file.php +++ b/Ansible_integration/Ansible_Integration/Create_microservice_Create_microservice_file.php @@ -36,6 +36,7 @@ $result = shell_exec($sed_command); $context['microservice_path'] = $microservice_dir.$microservice_file_name; +$context['microservice_file_name'] = $microservice_file_name; //Looks like we have finished. COngrats! task_success('Success. Microservice '.$microservice_file_name.'has been created successfully.'); diff --git a/Ansible_integration/Create_microservice_Create_new_microservice.php b/Ansible_integration/Ansible_Integration/Create_microservice_Create_new_microservice.php similarity index 100% rename from Ansible_integration/Create_microservice_Create_new_microservice.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Create_new_microservice.php diff --git a/Ansible_integration/Create_microservice_Create_playbook_microservice.php b/Ansible_integration/Ansible_Integration/Create_microservice_Create_playbook_microservice.php similarity index 83% rename from Ansible_integration/Create_microservice_Create_playbook_microservice.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Create_playbook_microservice.php index 0f66de2bb..852453567 100755 --- a/Ansible_integration/Create_microservice_Create_playbook_microservice.php +++ b/Ansible_integration/Ansible_Integration/Create_microservice_Create_playbook_microservice.php @@ -14,6 +14,7 @@ This is required to execute playbook on Ansible host */ $microservice_variables_array['var_playbook_path'] = sprintf($microservice_variables_array['var_playbook_path'], $playbook); +$microservice_variables_array['var_ansible_hosts'] = sprintf($microservice_variables_array['var_ansible_hosts'], $context['ansible_hosts']); //Create a string that contains new variables to write to MS file $microservice_create_vars = ''; @@ -24,7 +25,7 @@ } //Create a string that is used as command for CREAT method -$microservice_create_line = 'sudo ansible-playbook {$params.playbook_path} --extra-vars "'.$microservice_create_vars.'"'; +$microservice_create_line = 'ansible-playbook {$params.playbook_path} --extra-vars "'.$microservice_create_vars.'"'; $variable_line = ' \n'; foreach ($microservice_variables_array as $var) { $variable_line .= $var.'\n'; diff --git a/Ansible_integration/Create_microservice_Extract_playbook_variables.php b/Ansible_integration/Ansible_Integration/Create_microservice_Extract_playbook_variables.php similarity index 94% rename from Ansible_integration/Create_microservice_Extract_playbook_variables.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Extract_playbook_variables.php index ebd2481fa..910d7efb4 100755 --- a/Ansible_integration/Create_microservice_Extract_playbook_variables.php +++ b/Ansible_integration/Ansible_Integration/Create_microservice_Extract_playbook_variables.php @@ -51,6 +51,9 @@ $intention = $matches[1]; $section_end_pattern = '^'.$intention.'\S'; } + if (preg_match('/\s*?-\s*?hosts:(.+?)$/', $line, $matches) === 1) { + $context['ansible_hosts'] = $matches[1]; + } } //Extract variables from var lines diff --git a/Ansible_integration/Create_microservice_Modify_microservice_to_read_.php b/Ansible_integration/Ansible_Integration/Create_microservice_Modify_microservice_to_read_.php similarity index 100% rename from Ansible_integration/Create_microservice_Modify_microservice_to_read_.php rename to Ansible_integration/Ansible_Integration/Create_microservice_Modify_microservice_to_read_.php diff --git a/Ansible_integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php b/Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php similarity index 89% rename from Ansible_integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php rename to Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php index 0e84c3f62..96ccc4785 100755 --- a/Ansible_integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php +++ b/Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Add_new_microservices_to_deployment_settings.php @@ -4,7 +4,7 @@ * This file is necessary to include to use all the in-built libraries of /opt/fmc_repository/Reference/Common */ require_once '/opt/fmc_repository/Process/Reference/Common/common.php'; -require_once '/opt/fmc_repository/Process/Ansible_integration/ansible_integration_library.php'; +require_once '/opt/fmc_repository/Process/Ansible_integration/Ansible_Integration/ansible_integration_library.php'; //Import required variables $playbook_files_array = $context['playbook_files_array']; diff --git a/Ansible_integration/Create_microservices__Bulk_mode__Create_microservices.php b/Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Create_microservices.php similarity index 100% rename from Ansible_integration/Create_microservices__Bulk_mode__Create_microservices.php rename to Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Create_microservices.php diff --git a/Ansible_integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php b/Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php similarity index 93% rename from Ansible_integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php rename to Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php index 2e485fd08..34105054c 100755 --- a/Ansible_integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php +++ b/Ansible_integration/Ansible_Integration/Create_microservices__Bulk_mode__Extract_playbook_variables.php @@ -1,7 +1,7 @@ + + + + DISPLAYNAME + Block_IP_if_auth_failed.xml + + + DATE_MODIFICATION + 1614337922934 + + + REPOSITORY + Process + + + DATE_CREATION + 1614337922931 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_Block_IP b/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_Block_IP new file mode 100755 index 000000000..7e749d686 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_Block_IP @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Block_IP + + + DATE_MODIFICATION + 1614293335081 + + + REPOSITORY + Process + + + DATE_CREATION + 1614293335076 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_DELETE b/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_DELETE new file mode 100755 index 000000000..d1b9d0341 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614295048872 + + + REPOSITORY + Process + + + DATE_CREATION + 1614295048866 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/Block_IP_if_auth_failed.xml b/Ansible_integration/Block_IP_if_auth_failed/Block_IP_if_auth_failed.xml new file mode 100644 index 000000000..0a42c9976 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Block_IP_if_auth_failed.xml @@ -0,0 +1,41 @@ + + + + + + + + Block IP + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks + Get Ansible hosts + + + /opt/fmc_repository/Process/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks + Check conditions + + + /opt/fmc_repository/Process/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks + Block IP + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible Demo + service_id + python + 10000 + 5 + Block IP if auth failed + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/.meta_Tasks b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/.meta_Tasks new file mode 100755 index 000000000..7c2cfe70c --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614293335352 + + + REPOSITORY + Process + + + DATE_CREATION + 1614293335346 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Connect_to_Ansible_host_Defince_variables.php b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Block_IP.py similarity index 77% rename from Ansible_integration/.meta_Connect_to_Ansible_host_Defince_variables.php rename to Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Block_IP.py index 8c83b01a5..7b4de3066 100755 --- a/Ansible_integration/.meta_Connect_to_Ansible_host_Defince_variables.php +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Block_IP.py @@ -1,9 +1,13 @@ + + DISPLAYNAME + Task_Block_IP.py + DATE_MODIFICATION - 1601377603218 + 1614329208130 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1601377603212 + 1614293379085 TAG diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Check_conditions.py b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Check_conditions.py new file mode 100755 index 000000000..ef0e7d09c --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Check_conditions.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Check_conditions.py + + + DATE_MODIFICATION + 1614295166069 + + + REPOSITORY + Process + + + DATE_CREATION + 1614293372478 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Get_Ansible_hosts.py b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Get_Ansible_hosts.py new file mode 100755 index 000000000..95ecba191 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/.meta_Task_Get_Ansible_hosts.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Get_Ansible_hosts.py + + + DATE_MODIFICATION + 1614337922103 + + + REPOSITORY + Process + + + DATE_CREATION + 1614293365249 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Block_IP.py b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Block_IP.py new file mode 100755 index 000000000..61047e26c --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Block_IP.py @@ -0,0 +1,69 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + +""" + +#New Variables object +TaskVariables = Variables() + + +#Add vars to context +context = Variables.task_call(TaskVariables) + +process_id = context['SERVICEINSTANCEID'] + +process_id = context['SERVICEINSTANCEID'] + +#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']) + +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +RepositoryObject = Repository() + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_microservice'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + + +for ip in context['block_ip_list']: + ms_dict = {context['ansible_microservice']: {'': {'object_id': '', + 'playbook_path': microservice_variables['playbook_path'], + 'dport': '22', + 'sip': ip + } + } + } + AnsibleOrderObject.command_execute('CREATE', ms_dict) +if context['block_ip_list']: + success_comment = 'All IP addresses have been blocked' +else: + success_comment = 'There is no IP addresses to block' + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Check_conditions.py b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Check_conditions.py new file mode 100755 index 000000000..abadf4908 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Check_conditions.py @@ -0,0 +1,53 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + + +""" + + +#New Variables object +TaskVariables = Variables() + +#Add vars to context +context = Variables.task_call(TaskVariables) + +ms_auth_fail = 'auth_failure' + +fail_ip_dict = dict() +for device_id in context['server_list']: + CurrentDeviceOrderObject = Order(device_id) + CurrentDeviceOrderObject.command_synchronize(300) + objects_list = CurrentDeviceOrderObject.command_objects_instances(ms_auth_fail) + for fail_event in objects_list: + fail_object = CurrentDeviceOrderObject.command_objects_instances_by_id(ms_auth_fail, + fail_event)[ms_auth_fail][fail_event] + if fail_object['rhost'] not in fail_ip_dict.keys(): + fail_ip_dict[fail_object['rhost']] = 0 + + fail_ip_dict[fail_object['rhost']] += 1 + +context['block_ip_list'] = list() +#Prepare blocking list +for ip, number in fail_ip_dict.items(): + if number > 5: + context['block_ip_list'].append(ip) + +#Finish the task correctlly +result = MSA_API.process_content('ENDED', 'Auth fail events have been analysed', context, True) +print(result) diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Get_Ansible_hosts.py b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Get_Ansible_hosts.py new file mode 100755 index 000000000..128e04e9b --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_Block_IP/Tasks/Task_Get_Ansible_hosts.py @@ -0,0 +1,59 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + + +""" + + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('ansible_microservice', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ansible_device_id'] = re.match('^\D*?(\d+?)$', context['ansible_device_id']).group(1) +context['ansible_microservice'] = 'ANSIBLE_MS__based_on_grenoble_server_firewall_' + +ms_ansible_host = 'Read_hosts_file' + +#Create site router Order object +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +server_list = list() +#Find device ID value +MsaLookup = lookup.Lookup() +MsaLookup.look_list_device_ids() +devices = json.loads(MsaLookup.content) + +objects_list = AnsibleOrderObject.command_objects_instances(ms_ansible_host) +for ansible_group in objects_list: + ansible_group_object = AnsibleOrderObject.command_objects_instances_by_id(ms_ansible_host, + ansible_group)[ms_ansible_host][ansible_group] + for device in devices: + if re.search(ansible_group_object['object_id'], device['name']): + server_list.append(device['id']) +context['server_list'] = server_list + +#Finish the task correctlly +result = MSA_API.process_content('ENDED', 'All variables have been defined successfully', context, True) +print(result) diff --git a/Ansible_integration/Block_IP_if_auth_failed/Process_DELETE/.meta_Tasks b/Ansible_integration/Block_IP_if_auth_failed/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..e2092f7c8 --- /dev/null +++ b/Ansible_integration/Block_IP_if_auth_failed/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614295048988 + + + REPOSITORY + Process + + + DATE_CREATION + 1614295048983 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/.meta_Clean_up_Ansible_demo.xml b/Ansible_integration/Clean_up_Ansible_demo/.meta_Clean_up_Ansible_demo.xml new file mode 100755 index 000000000..19a4e7b01 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/.meta_Clean_up_Ansible_demo.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Clean_up_Ansible_demo.xml + + + DATE_MODIFICATION + 1615907898289 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907898285 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_Clean_up_Ansible_demo b/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_Clean_up_Ansible_demo new file mode 100755 index 000000000..266d98503 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_Clean_up_Ansible_demo @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Clean_up_Ansible_demo + + + DATE_MODIFICATION + 1614930003719 + + + REPOSITORY + Process + + + DATE_CREATION + 1614930003709 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_DELETE b/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_DELETE new file mode 100755 index 000000000..1c46cd57c --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614943555238 + + + REPOSITORY + Process + + + DATE_CREATION + 1614943555232 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Clean_up_Ansible_demo.xml b/Ansible_integration/Clean_up_Ansible_demo/Clean_up_Ansible_demo.xml new file mode 100644 index 000000000..f78273937 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Clean_up_Ansible_demo.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + Clean up Ansible demo + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up IPAM + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up Grenoble router + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up DNS + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up Ansible-controlled hosts + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up Ansible server + + + /opt/fmc_repository/Process/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks + Clean up processes + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to clean up Ansible demo and return it to initial state + service_id + python + 10000 + 5 + Clean up Ansible demo + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/.meta_Tasks b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/.meta_Tasks new file mode 100755 index 000000000..17c65c56a --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614930003806 + + + REPOSITORY + Process + + + DATE_CREATION + 1614930003800 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_processes.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_processes.py new file mode 100755 index 000000000..967be0643 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_processes.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_processes.py + + + DATE_MODIFICATION + 1615236055881 + + + REPOSITORY + Process + + + DATE_CREATION + 1615236055876 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_controlled_hosts.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_controlled_hosts.py new file mode 100755 index 000000000..844137a0d --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_controlled_hosts.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_up_Ansible_controlled_hosts.py + + + DATE_MODIFICATION + 1615239620902 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239620897 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_server.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_server.py new file mode 100755 index 000000000..0feb0c64c --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Ansible_server.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_up_Ansible_server.py + + + DATE_MODIFICATION + 1615907879608 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907879603 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_DNS.py similarity index 77% rename from Ansible_integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php rename to Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_DNS.py index 79c79a62c..93a0fd2c6 100755 --- a/Ansible_integration/.meta_Create_microservices__Bulk_mode__Monitor_changes.php +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_DNS.py @@ -1,9 +1,13 @@ + + DISPLAYNAME + Task_Clean_up_DNS.py + DATE_MODIFICATION - 1602507085526 + 1615907795255 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1602507085519 + 1615907795247 TAG diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Grenoble_router.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Grenoble_router.py new file mode 100755 index 000000000..6088ec986 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_Grenoble_router.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_up_Grenoble_router.py + + + DATE_MODIFICATION + 1615907785281 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907785275 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_IPAM.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_IPAM.py new file mode 100755 index 000000000..2646633fc --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_IPAM.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_up_IPAM.py + + + DATE_MODIFICATION + 1615907751215 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907751211 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_processes.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_processes.py new file mode 100755 index 000000000..518166972 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/.meta_Task_Clean_up_processes.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Clean_up_processes.py + + + DATE_MODIFICATION + 1615900258251 + + + REPOSITORY + Process + + + DATE_CREATION + 1615900258246 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_processes.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_processes.py new file mode 100755 index 000000000..0e7d9433c --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_processes.py @@ -0,0 +1,45 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from msa_sdk.customer import Customer +from msa_sdk import util + +from datetime import datetime +from msa_sdk import constants +import re +import json +import sys +import time + + +time.sleep(5) + +#New Variables object +TaskVariables = Variables() + +context = Variables.task_call(TaskVariables) +process_id = context['SERVICEINSTANCEID'] + +Orchestration = Orchestration(context['UBIQUBEID']) +response = Orchestration.list_service_instances() +service_list = json.loads(Orchestration.content) + +for service in service_list: + if service['state'] == 'ACTIVE': + if service['name'] in ('Process/IP_CONTROLLER/Fulfilment_Handler/Fulfilment_Handler', + 'Process/IP_CONTROLLER/Fulfilment_Dispatcher/Fulfilment_Dispatcher', + 'Process/IP_CONTROLLER/Cleaner/Cleaner'): + is_finished = True + response = Orchestration.list_process_instances_by_service(service['id']) + for process in json.loads(Orchestration.content): + if process['status']['status'] != 'ENDED': + is_finished = False + + if is_finished: + Orchestration.delete_service(service['id']) + +#Finish the task correctlly +result = MSA_API.process_content('ENDED', 'Cleaner has been finished' , context, True) +print(result) diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_controlled_hosts.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_controlled_hosts.py new file mode 100755 index 000000000..3786390fb --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_controlled_hosts.py @@ -0,0 +1,74 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + - Execute a playbook what cleans Linux host states: + - Remove lldpd packet; + - Flush Iptables; + - Flush routes; + - Flush interface config + +""" + +#New Variables object +TaskVariables = Variables() + +#Add vars to context +context = Variables.task_call(TaskVariables) + +#Define additional variables +process_id = context['SERVICEINSTANCEID'] + +#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 Repository object +RepositoryObject = Repository() + +#Create Order object for Ansible host +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_rollback_ms'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + +#Walk through the provided Ansible-based microservice variables. If the variable exists in exchange dict --> get the value. +#Else - empty string +object_dict = dict() +if microservice_variables: + for variable in microservice_variables: + if variable == 'playbook_path': + object_dict[variable] = microservice_variables['playbook_path'] + else: + object_dict[variable] = str() + + ms_dict = {context['ansible_rollback_ms']: {'': object_dict}} + AnsibleOrderObject.command_execute('CREATE', ms_dict) + +success_comment = 'Microservice {} has executed Ansible playbook successfully'.format(context['ansible_rollback_ms']) + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_server.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_server.py new file mode 100755 index 000000000..dc32eacf7 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Ansible_server.py @@ -0,0 +1,80 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.customer import Customer +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Remove default values for ansible-based microservice name in + the workflow what executes ansible-based microservices + +""" + +#New Variables object +TaskVariables = Variables() + + +#Add vars to context +context = Variables.task_call(TaskVariables) + + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] + +#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']) + +customer_id = re.match('^\D+?(\d+?)$',context['UBIQUBEID']).group(1) +CustomerObject = Customer() +RepositoryObject = Repository() +deployment_settings_list = CustomerObject.get_deployment_settings_by_customer_id(customer_id) +ansible_profile = dict() +counter = 0 +while not ansible_profile and counter < len(deployment_settings_list): + if int(context['ansible_device_id']) in deployment_settings_list[counter]['attachedManagedEntities']: + ansible_profile = deployment_settings_list[counter] + counter += 1 +ms_list = list() +for microservice_uri, microservice_details in ansible_profile['microserviceUris'].items(): + if 'Ansible-based' in microservice_details['groups']: + ms_list.append(microservice_uri) +RepositoryObject.detach_microserviceis_from_configuration_profile(ansible_profile['id'], ms_list) + +for microservice_uri in ms_list: + RepositoryObject.delete_repository_resource(microservice_uri) + +workflow_details = RepositoryObject.get_workflow_definition(context['ansible_execute_wf']) + +for variable, details in enumerate(workflow_details['variables']['variable']): + if details['name'] == 'params.ansible_microservice': + details['values'] = list() + +RepositoryObject.change_workflow_definition(context['ansible_execute_wf'], workflow_details) + +result = MSA_API.process_content('ENDED', 'Ansible-based microservices have been removed', context, True) +print(result) + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_DNS.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_DNS.py new file mode 100755 index 000000000..fa3e1a20e --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_DNS.py @@ -0,0 +1,62 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Remove server FQDN records from DNS server + +""" + +#New Variables object +TaskVariables = Variables() + +#Add vars to context +context = Variables.task_call(TaskVariables) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +site_ip_plan = exchange_dict['site_ip_plan'] +ms_router_dns_records = context['ms_aliases']['Router DNS host records'] + +#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 site router Order object +RouterOrderObject = Order(context['dns_server_device_id']) +RouterOrderObject.command_synchronize(300) + +#Create DNS record for each host in site_ip_plan +objects_list = RouterOrderObject.command_objects_instances(ms_router_dns_records) + +for host_record_object in objects_list: + ms_dict = {ms_router_dns_records: {host_record_object: dict()}} + RouterOrderObject.command_execute('DELETE', ms_dict) + +result = MSA_API.process_content('ENDED', 'DNS Records have been updated', context, True) +print(result) + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Grenoble_router.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Grenoble_router.py new file mode 100755 index 000000000..fe798cf4a --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_Grenoble_router.py @@ -0,0 +1,99 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Remove IPv4 address from router interface + - Remove IPv4 network from OSPF announcment + +""" + +#New Variables object +TaskVariables = Variables() + + +#Add vars to context +context = Variables.task_call(TaskVariables) + + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +#Define additional variables +process_id = context['SERVICEINSTANCEID'] +router_device_id = exchange_dict['router_device_id'] +subnet = exchange_dict['site_prefix'] +site_ip_plan = exchange_dict['site_ip_plan'] +ms_router_ospf_config = context['ms_aliases']['Router OSPF configuration'] +ms_router_interface = context['ms_aliases']['Router Interface'] + + +#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']) + +#Get site router name +RouterDevice = Device(customer_id = re.match('^\D+?(\d+?)$',context['UBIQUBEID']).group(1), + device_id = router_device_id + ) +RouterDevice.read() +router_name = RouterDevice.name + +#Create site router Order object +RouterOrderObject = Order(exchange_dict['router_device_id']) +RouterOrderObject.command_synchronize(300) + +#Configure IP address on CE link +ms_dict = {ms_router_interface: + {site_ip_plan[router_name]['interface']: {'object_id': site_ip_plan[router_name]['interface'], + 'ip_addr': str(), + 'ip_prefix': str() + } + } + } +RouterOrderObject.command_execute('CREATE', ms_dict) + + +#Clean up route announcment +objects_list = RouterOrderObject.command_objects_instances(ms_router_ospf_config) +ospf_process_object = RouterOrderObject.command_objects_instances_by_id(ms_router_ospf_config, objects_list[0])[ms_router_ospf_config][objects_list[0]] + +#Remove new network to announce +index_to_remove = None +for index, value in ospf_process_object['interface'].items(): + if value['network_address'] == exchange_dict['site_prefix'].split('/')[0]: + index_to_remove = index + break +if index_to_remove is not None: + del ospf_process_object['interface'][index_to_remove] + +#Configure OSPF +ms_dict = {ms_router_ospf_config: {ospf_process_object['object_id']: ospf_process_object}} +RouterOrderObject.command_execute('UPDATE', ms_dict) + + + +result = MSA_API.process_content('ENDED', 'Router interface and OSPF configuration has been updated', context, True) +print(result) + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_IPAM.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_IPAM.py new file mode 100755 index 000000000..b892135ce --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_IPAM.py @@ -0,0 +1,109 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Clean up IPv4 prefixes and IPv4 addresses in IPAM + + +""" + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ipam_device_id', var_type = 'Device') +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('dns_server_device_id', var_type = 'Device') +TaskVariables.add('ansible_rollback_ms', var_type = 'String') +TaskVariables.add('exchange_file', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ipam_device_id'] = re.match('^\D+?(\d+?)$', context['ipam_device_id']).group(1) +context['ansible_device_id'] = re.match('^\D+?(\d+?)$', context['ansible_device_id']).group(1) +context['dns_server_device_id'] = re.match('^\D+?(\d+?)$', context['dns_server_device_id']).group(1) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +#Import microservice alias list +with open('/opt/fmc_repository/Process/Ansible_integration/microservice_list.json', 'r') as alias_file: + context['ms_aliases'] = json.load(alias_file) + +#Define additional variables +process_id = context['SERVICEINSTANCEID'] +ipam_device_id = context['ipam_device_id'] +ms_ipam_tenant = context['ms_aliases']['IPAM Tenants'] +ms_ipam_site = context['ms_aliases']['IPAM Sites'] +ms_ipam_device = context['ms_aliases']['IPAM Devices'] +ms_interface_connection = context['ms_aliases']['IPAM Interface Connections'] +ms_ipam_prefix = context['ms_aliases']['IPAM IPv4 prefixes'] +ms_ipam_avaliable_prefix = context['ms_aliases']['IPAM Available Prefixes'] +ms_ipam_address = context['ms_aliases']['IPAM IPv4 addresses'] +ms_ipam_interface = context['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) + +#A list of IP address what should be removed from IPAM +ip_address_list = list() +for host, host_detial in exchange_dict['site_ip_plan'].items(): + ip_address_list.append(host_detial['ip_address']) + +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_address) +counter = 0 +while ip_address_list and (counter < len(objects_list)): + object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_address, + objects_list[counter])[ms_ipam_address][objects_list[counter]] + if 'tenant' in list(object.keys()): + if object['tenant'] == exchange_dict['tenant'] and object['object_id'] in ip_address_list: + ms_dict = {ms_ipam_address: {object['object_id']: dict()}} + IpamOrderObject.command_execute('DELETE', ms_dict) + ip_address_list.remove(object['object_id']) + counter += 1 + + +#Clean up prefix +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_prefix) +counter = 0 +is_removed = False +while not is_removed and (counter < len(objects_list)): + object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_prefix, + objects_list[counter])[ms_ipam_prefix][objects_list[counter]] + if 'tenant' in list(object.keys()): + if object['tenant'] == exchange_dict['tenant'] and exchange_dict['site_prefix'] == object['object_id']: + ms_dict = {ms_ipam_prefix: {object['object_id']: dict()}} + IpamOrderObject.command_execute('DELETE', ms_dict) + is_removed = True + counter += 1 + +result = MSA_API.process_content('ENDED', 'IPAM has been updated', context, True) +print(result) + diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_processes.py b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_processes.py new file mode 100755 index 000000000..52f0f9108 --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_Clean_up_Ansible_demo/Tasks/Task_Clean_up_processes.py @@ -0,0 +1,60 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from msa_sdk.customer import Customer +from msa_sdk import util + +from datetime import datetime +from msa_sdk import constants +import re +import json +import sys +import time + +""" +The proposals of the task are: + - Clean up processes + +""" + +time.sleep(5) + +#New Variables object +TaskVariables = Variables() + +context = Variables.task_call(TaskVariables) +process_id = context['SERVICEINSTANCEID'] + +Orchestration = Orchestration(context['UBIQUBEID']) +response = Orchestration.list_service_instances() +service_list = json.loads(Orchestration.content) + + +Orchestration.execute_service('Process/Ansible_integration/Ansible_Integration/Ansible_integration', 'Process/Ansible_integration/Ansible_Integration/Stop_playbook_monitoring', dict()) +time.sleep(5) +Orchestration.execute_service('Process/Ansible_integration/Ansible_Integration/Ansible_integration', 'Process/_TEST_Ansible_integration/DELETE', dict()) +time.sleep(5) +for service in service_list: + if service['state'] == 'ACTIVE': + if service['name'] in ('Process/Ansible_integration/Configure_router_interface/Configure_router_interface', +'Process/Ansible_integration/Configure_route_announcement/Configure_route_announcement', +'Process/Ansible_integration/Update_DNS_records/Update_DNS_records', +'Process/Ansible_integration/Get_router_interface/Get_router_interface', +'Process/Ansible_integration/Import_from_IPAM/Import_from_IPAM', +'Process/Ansible_integration/Ansible_Integration/Ansible_integration', +'Process/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice', +'Process/Ansible_integration/Clean_up_Ansible_demo/Clean_up_Ansible_demo'): + is_finished = True + response = Orchestration.list_process_instances_by_service(service['id']) + for process in json.loads(Orchestration.content): + if process['status']['status'] not in ('ENDED', 'FAILED'): + is_finished = False + + if is_finished: + Orchestration.delete_service(service['id']) + +#Finish the task correctlly +result = MSA_API.process_content('ENDED', 'Cleaner has been finished' , context, True) +print(result) \ No newline at end of file diff --git a/Ansible_integration/Clean_up_Ansible_demo/Process_DELETE/.meta_Tasks b/Ansible_integration/Clean_up_Ansible_demo/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..8712a636e --- /dev/null +++ b/Ansible_integration/Clean_up_Ansible_demo/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614943555332 + + + REPOSITORY + Process + + + DATE_CREATION + 1614943555326 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/.meta_Configure_host_interface.xml b/Ansible_integration/Configure_host_interface/.meta_Configure_host_interface.xml new file mode 100755 index 000000000..bcb10128c --- /dev/null +++ b/Ansible_integration/Configure_host_interface/.meta_Configure_host_interface.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Configure_host_interface.xml + + + DATE_MODIFICATION + 1614319750333 + + + REPOSITORY + Process + + + DATE_CREATION + 1614319750330 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/.meta_Process_DELETE b/Ansible_integration/Configure_host_interface/.meta_Process_DELETE new file mode 100755 index 000000000..9b3748f43 --- /dev/null +++ b/Ansible_integration/Configure_host_interface/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614319749375 + + + REPOSITORY + Process + + + DATE_CREATION + 1614319749370 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/.meta_Process_Execute_microservice b/Ansible_integration/Configure_host_interface/.meta_Process_Execute_microservice new file mode 100755 index 000000000..dc0215c6f --- /dev/null +++ b/Ansible_integration/Configure_host_interface/.meta_Process_Execute_microservice @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Execute_microservice + + + DATE_MODIFICATION + 1614287926117 + + + REPOSITORY + Process + + + DATE_CREATION + 1614287926112 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/Configure_host_interface.xml b/Ansible_integration/Configure_host_interface/Configure_host_interface.xml new file mode 100644 index 000000000..c00ecff86 --- /dev/null +++ b/Ansible_integration/Configure_host_interface/Configure_host_interface.xml @@ -0,0 +1,34 @@ + + + + + + + + + Execute microservice + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks + Execute microservice + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible Demo + service_id + python + 10000 + 5 + Configure host interface + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Configure_host_interface/Process_DELETE/.meta_Tasks b/Ansible_integration/Configure_host_interface/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..0649a339b --- /dev/null +++ b/Ansible_integration/Configure_host_interface/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614319749459 + + + REPOSITORY + Process + + + DATE_CREATION + 1614319749453 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/Process_Execute_microservice/.meta_Tasks b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/.meta_Tasks new file mode 100755 index 000000000..2bad8de87 --- /dev/null +++ b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614287926232 + + + REPOSITORY + Process + + + DATE_CREATION + 1614287926226 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py new file mode 100755 index 000000000..0713417b6 --- /dev/null +++ b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Execute_microservice.py + + + DATE_MODIFICATION + 1614289532416 + + + REPOSITORY + Process + + + DATE_CREATION + 1614287941290 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/Task_Execute_microservice.py b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/Task_Execute_microservice.py new file mode 100755 index 000000000..e49f04a35 --- /dev/null +++ b/Ansible_integration/Configure_host_interface/Process_Execute_microservice/Tasks/Task_Execute_microservice.py @@ -0,0 +1,85 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + +""" + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('ansible_microservice', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ansible_device_id'] = re.match('^\D+?(\d+?)$', context['ansible_device_id']).group(1) + +process_id = context['SERVICEINSTANCEID'] + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +site_ip_plan = exchange_dict['site_ip_plan'] + +#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 Ansible order object +RepositoryObject = Repository() +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_microservice'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + +#Get list of IP addresses to configure on servers +ip_list = list() +for device, details in site_ip_plan.items(): + if re.match('srv', device): + ip_list.append(details) + + +ms_dict = {context['ansible_microservice']: {'': {'object_id': '', + 'playbook_path': microservice_variables['playbook_path'], + 'server_1_iface': ip_list[0]['interface'], + 'server_1_ip_address': ip_list[0]['ip_address'].split('/')[0], + 'server_1_prefix_len':ip_list[0]['ip_address'].split('/')[1], + 'server_2_iface': ip_list[1]['interface'], + 'server_2_ip_address': ip_list[1]['ip_address'].split('/')[0], + 'server_2_prefix_len':ip_list[1]['ip_address'].split('/')[1] + } + } + } +AnsibleOrderObject.command_execute('CREATE', ms_dict) + +success_comment = 'IP addresses have been configured on host interfaces' + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Configure_host_route/.meta_Configure_host_route.xml b/Ansible_integration/Configure_host_route/.meta_Configure_host_route.xml new file mode 100755 index 000000000..72d924219 --- /dev/null +++ b/Ansible_integration/Configure_host_route/.meta_Configure_host_route.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Configure_host_route.xml + + + DATE_MODIFICATION + 1614290508647 + + + REPOSITORY + Process + + + DATE_CREATION + 1614290508643 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/.meta_Process_DELETE b/Ansible_integration/Configure_host_route/.meta_Process_DELETE new file mode 100755 index 000000000..f51506b97 --- /dev/null +++ b/Ansible_integration/Configure_host_route/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614290475945 + + + REPOSITORY + Process + + + DATE_CREATION + 1614290475940 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/.meta_Process_Execute_microservice b/Ansible_integration/Configure_host_route/.meta_Process_Execute_microservice new file mode 100755 index 000000000..89e1d8bcd --- /dev/null +++ b/Ansible_integration/Configure_host_route/.meta_Process_Execute_microservice @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Execute_microservice + + + DATE_MODIFICATION + 1614289699805 + + + REPOSITORY + Process + + + DATE_CREATION + 1614289699800 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/Configure_host_route.xml b/Ansible_integration/Configure_host_route/Configure_host_route.xml new file mode 100644 index 000000000..b3ab3c966 --- /dev/null +++ b/Ansible_integration/Configure_host_route/Configure_host_route.xml @@ -0,0 +1,34 @@ + + + + + + + + + Execute microservice + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks + Execute microservice + + + + DELETE + DELETE + 5 + + + + + The workflow is part os Ansible Demo + service_id + python + 10000 + 5 + Configure host route + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Configure_host_route/Process_DELETE/.meta_Tasks b/Ansible_integration/Configure_host_route/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..d2d2f7000 --- /dev/null +++ b/Ansible_integration/Configure_host_route/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614290476060 + + + REPOSITORY + Process + + + DATE_CREATION + 1614290476055 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/Process_Execute_microservice/.meta_Tasks b/Ansible_integration/Configure_host_route/Process_Execute_microservice/.meta_Tasks new file mode 100755 index 000000000..e9ca625bc --- /dev/null +++ b/Ansible_integration/Configure_host_route/Process_Execute_microservice/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614289699929 + + + REPOSITORY + Process + + + DATE_CREATION + 1614289699923 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py b/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py new file mode 100755 index 000000000..f2d85fd89 --- /dev/null +++ b/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Execute_microservice.py + + + DATE_MODIFICATION + 1614520427305 + + + REPOSITORY + Process + + + DATE_CREATION + 1614289712204 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/Task_Execute_microservice.py b/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/Task_Execute_microservice.py new file mode 100755 index 000000000..a4d24a049 --- /dev/null +++ b/Ansible_integration/Configure_host_route/Process_Execute_microservice/Tasks/Task_Execute_microservice.py @@ -0,0 +1,80 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + - Get variables values for Ansible-based microservices from exchange file; + - Get variables names from provided Ansible-based microservice; + - Execute provided Ansible-based microservice with variables from exchange file. + +""" + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('ansible_microservice', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ansible_device_id'] = re.match('^\D+?(\d+?)$', context['ansible_device_id']).group(1) + +#Define additional variables +process_id = context['SERVICEINSTANCEID'] + +#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']) + +#Get variables for ansible based microservices from exchange file +with open(context['exchange_file'], 'r') as exchange_file: + ansible_variables_dict = json.load(exchange_file)['ansible_microservice_variables'] + +#Create Repository object +RepositoryObject = Repository() + +#Create Order object for Ansible host +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_microservice'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + +#Walk through the provided Ansible-based microservice variables. If the variable exists in exchange dict --> get the value. +#Else - empty string +object_dict = dict() +for variable in microservice_variables: + if variable in ansible_variables_dict: + object_dict[variable] = ansible_variables_dict[variable] + else: + object_dict[variable] = str() + +ms_dict = {context['ansible_microservice']: {'': object_dict}} +AnsibleOrderObject.command_execute('CREATE', ms_dict) + +success_comment = 'Microservice {} has executed Ansible playbook successfully'.format(context['ansible_microservice']) + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Configure_route_announcement/.meta_Configure_route_announcement.xml b/Ansible_integration/Configure_route_announcement/.meta_Configure_route_announcement.xml new file mode 100755 index 000000000..77bca1a55 --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/.meta_Configure_route_announcement.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Configure_route_announcement.xml + + + DATE_MODIFICATION + 1615239988276 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239988272 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Configure_route_announcement/.meta_Process_Configure_route_announcement b/Ansible_integration/Configure_route_announcement/.meta_Process_Configure_route_announcement new file mode 100755 index 000000000..04f75de79 --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/.meta_Process_Configure_route_announcement @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Configure_route_announcement + + + DATE_MODIFICATION + 1614286260950 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286260946 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_route_announcement/.meta_Process_DELETE b/Ansible_integration/Configure_route_announcement/.meta_Process_DELETE new file mode 100755 index 000000000..c017a9047 --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614286575795 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286575790 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_route_announcement/Configure_route_announcement.xml b/Ansible_integration/Configure_route_announcement/Configure_route_announcement.xml new file mode 100644 index 000000000..fa88547be --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/Configure_route_announcement.xml @@ -0,0 +1,32 @@ + + + + + + + Configure route announcement + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks + Configure route announcement + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to configure server subnet announcement via OSPF + service_id + python + 10000 + 5 + Configure route announcement + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/.meta_Tasks b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/.meta_Tasks new file mode 100755 index 000000000..6f19e77ba --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614286261037 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286261031 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/.meta_Task_Configure_route_announcement.py b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/.meta_Task_Configure_route_announcement.py new file mode 100755 index 000000000..42d048c6e --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/.meta_Task_Configure_route_announcement.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Configure_route_announcement.py + + + DATE_MODIFICATION + 1615239984300 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239984295 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/Task_Configure_route_announcement.py b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/Task_Configure_route_announcement.py new file mode 100755 index 000000000..c564b38da --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/Process_Configure_route_announcement/Tasks/Task_Configure_route_announcement.py @@ -0,0 +1,85 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Configure server subnet announcment via OSPF + + +""" + +#New Variables object +TaskVariables = Variables() + + +#Add vars to context +context = Variables.task_call(TaskVariables) + +#Import microservice alias list +with open('/opt/fmc_repository/Process/Ansible_integration/Get_router_interface/microservice_list.json', 'r') as alias_file: + context['ms_aliases'] = json.load(alias_file) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +subnet = exchange_dict['site_prefix'] +site_ip_plan = exchange_dict['site_ip_plan'] +site_prefix = exchange_dict['site_prefix'] +ms_router_ospf_config = context['ms_aliases']['Router OSPF configuration'] +ms_router_interface = context['ms_aliases']['Router Interface'] + + +#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 site router Order object +RouterOrderObject = Order(exchange_dict['router_device_id']) +RouterOrderObject.command_synchronize(300) + +objects_list = RouterOrderObject.command_objects_instances(ms_router_ospf_config) +ospf_process_object = RouterOrderObject.command_objects_instances_by_id(ms_router_ospf_config, objects_list[0])[ms_router_ospf_config][objects_list[0]] + +#Add new network to announce +ospf_process_object_interfaces = list(ospf_process_object['interface'].keys()) +for index, value in enumerate(ospf_process_object_interfaces): + ospf_process_object_interfaces[index] = int(value) + +new_index = str(sorted(ospf_process_object_interfaces)[-1]+1) +NetObject = ipaddress.ip_network(site_prefix) +ospf_process_object['interface'][new_index] = {'area': '0', + 'network_address': str(NetObject.network_address), + 'network_mask': str(NetObject.hostmask) + } + +#Configure OSPF +ms_dict = {ms_router_ospf_config: {ospf_process_object['object_id']: ospf_process_object}} +RouterOrderObject.command_execute('UPDATE', ms_dict) + + +result = MSA_API.process_content('ENDED', 'Route has been announced', context, True) +print(result) + diff --git a/Ansible_integration/Configure_route_announcement/Process_DELETE/.meta_Tasks b/Ansible_integration/Configure_route_announcement/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..6713fe297 --- /dev/null +++ b/Ansible_integration/Configure_route_announcement/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614286575879 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286575874 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/.meta_Configure_router_interface.xml b/Ansible_integration/Configure_router_interface/.meta_Configure_router_interface.xml new file mode 100755 index 000000000..ff24298e9 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/.meta_Configure_router_interface.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Configure_router_interface.xml + + + DATE_MODIFICATION + 1615240039395 + + + REPOSITORY + Process + + + DATE_CREATION + 1615240039392 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/.meta_Process_Configure_router_interface b/Ansible_integration/Configure_router_interface/.meta_Process_Configure_router_interface new file mode 100755 index 000000000..39ecd2c6f --- /dev/null +++ b/Ansible_integration/Configure_router_interface/.meta_Process_Configure_router_interface @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Configure_router_interface + + + DATE_MODIFICATION + 1614285170689 + + + REPOSITORY + Process + + + DATE_CREATION + 1614285170684 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/.meta_Process_DELETE b/Ansible_integration/Configure_router_interface/.meta_Process_DELETE new file mode 100755 index 000000000..b022b0ed2 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614286063083 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286063078 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/Configure_router_interface.xml b/Ansible_integration/Configure_router_interface/Configure_router_interface.xml new file mode 100644 index 000000000..b767f5083 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/Configure_router_interface.xml @@ -0,0 +1,32 @@ + + + + + + + Configure router interface + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks + Configure router interface + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to configure router interface for the server segment + service_id + python + 10000 + 5 + Configure router interface + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/.meta_Tasks b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/.meta_Tasks new file mode 100755 index 000000000..1560d1f97 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614285170821 + + + REPOSITORY + Process + + + DATE_CREATION + 1614285170815 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/.meta_Task_Configure_router_interface.py b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/.meta_Task_Configure_router_interface.py new file mode 100755 index 000000000..46b9154a7 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/.meta_Task_Configure_router_interface.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Configure_router_interface.py + + + DATE_MODIFICATION + 1615240038329 + + + REPOSITORY + Process + + + DATE_CREATION + 1615240038323 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/Task_Configure_router_interface.py b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/Task_Configure_router_interface.py new file mode 100755 index 000000000..9f9b325c6 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/Process_Configure_router_interface/Tasks/Task_Configure_router_interface.py @@ -0,0 +1,82 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Configure router interface + + +""" + +#New Variables object +TaskVariables = Variables() + + +#Add vars to context +context = Variables.task_call(TaskVariables) + +#Import microservice alias list +with open('/opt/fmc_repository/Process/Ansible_integration/Get_router_interface/microservice_list.json', 'r') as alias_file: + context['ms_aliases'] = json.load(alias_file) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +router_device_id = exchange_dict['router_device_id'] +subnet = exchange_dict['site_prefix'] +site_ip_plan = exchange_dict['site_ip_plan'] +ms_router_ospf_config = context['ms_aliases']['Router OSPF configuration'] +ms_router_interface = context['ms_aliases']['Router Interface'] + + +#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']) + +#Get site router name +RouterDevice = Device(customer_id = re.match('^\D+?(\d+?)$',context['UBIQUBEID']).group(1), + device_id = router_device_id + ) +RouterDevice.read() +router_name = RouterDevice.name + +#Create site router Order object +RouterOrderObject = Order(exchange_dict['router_device_id']) +RouterOrderObject.command_synchronize(300) + +#Configure IP address on CE link +ms_dict = {ms_router_interface: + {site_ip_plan[router_name]['interface']: {'object_id': site_ip_plan[router_name]['interface'], + 'ip_addr': site_ip_plan[router_name]['ip_address'].split('/')[0], + 'ip_prefix': site_ip_plan[router_name]['ip_address'].split('/')[1] + } + } + } +RouterOrderObject.command_execute('CREATE', ms_dict) + + +result = MSA_API.process_content('ENDED', 'Router interface has been configured', context, True) +print(result) + diff --git a/Ansible_integration/Configure_router_interface/Process_DELETE/.meta_Tasks b/Ansible_integration/Configure_router_interface/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..bc3371df2 --- /dev/null +++ b/Ansible_integration/Configure_router_interface/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614286063171 + + + REPOSITORY + Process + + + DATE_CREATION + 1614286063165 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/.meta_Execute_Ansible_based_microservice.xml b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Execute_Ansible_based_microservice.xml new file mode 100755 index 000000000..4d93dd17b --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Execute_Ansible_based_microservice.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Execute_Ansible_based_microservice.xml + + + DATE_MODIFICATION + 1615907649233 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907649227 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_DELETE b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_DELETE new file mode 100755 index 000000000..a12f8483a --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614525158505 + + + REPOSITORY + Process + + + DATE_CREATION + 1614525158502 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_Execute_microservice b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_Execute_microservice new file mode 100755 index 000000000..2a55c0393 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/.meta_Process_Execute_microservice @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Execute_microservice + + + DATE_MODIFICATION + 1614523661893 + + + REPOSITORY + Process + + + DATE_CREATION + 1614523661889 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml b/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml new file mode 100644 index 000000000..bd93f7915 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml @@ -0,0 +1,34 @@ + + + + + + + + + Execute microservice + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks + Execute microservice + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to execute Ansible-based microservice inside BPM. It gets microservice name as input and looking for the microservice variables in exchange file ("ansible_microservice_variables") + service_id + python + 10000 + 5 + Execute Ansible-based microservice + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml.bkp b/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml.bkp new file mode 100644 index 000000000..f1eb9ab50 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Execute_Ansible_based_microservice.xml.bkp @@ -0,0 +1,34 @@ + + + + + + + + + Execute microservice + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks + Execute microservice + + + + DELETE + DELETE + 5 + + + + + + service_id + python + 10000 + 5 + Execute Ansible-based microservice + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Process_DELETE/.meta_Tasks b/Ansible_integration/Execute_Ansible_based_microservice/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..0617e30c5 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614525158589 + + + REPOSITORY + Process + + + DATE_CREATION + 1614525158585 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/.meta_Tasks b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/.meta_Tasks new file mode 100755 index 000000000..86ab451e8 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614523661975 + + + REPOSITORY + Process + + + DATE_CREATION + 1614523661971 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py new file mode 100755 index 000000000..3233cd3f2 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/.meta_Task_Execute_microservice.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Execute_microservice.py + + + DATE_MODIFICATION + 1615907648205 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907648198 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/Task_Execute_microservice.py b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/Task_Execute_microservice.py new file mode 100755 index 000000000..6e30b4cf7 --- /dev/null +++ b/Ansible_integration/Execute_Ansible_based_microservice/Process_Execute_microservice/Tasks/Task_Execute_microservice.py @@ -0,0 +1,82 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + - Get variables values for Ansible-based microservices from exchange file; + - Get variables names from provided Ansible-based microservice; + - Execute provided Ansible-based microservice with variables from exchange file. + +""" + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('ansible_microservice', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ansible_device_id'] = re.match('^\D+?(\d+?)$', context['ansible_device_id']).group(1) + +#Define additional variables +process_id = context['SERVICEINSTANCEID'] + +#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']) + +#Get variables for ansible based microservices from exchange file +with open(context['exchange_file'], 'r') as exchange_file: + ansible_variables_dict = json.load(exchange_file)['ansible_microservice_variables'] + +#Create Repository object +RepositoryObject = Repository() + +#Create Order object for Ansible host +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_microservice'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + +#Walk through the provided Ansible-based microservice variables. If the variable exists in exchange dict --> get the value. +#Else - empty string +object_dict = dict() +for variable in microservice_variables: + if variable in ansible_variables_dict: + object_dict[variable] = ansible_variables_dict[variable] + elif variable == 'playbook_path': + object_dict[variable] = microservice_variables['playbook_path'] + else: + object_dict[variable] = str() + +ms_dict = {context['ansible_microservice']: {'': object_dict}} +AnsibleOrderObject.command_execute('CREATE', ms_dict) + +success_comment = 'Microservice {} has executed Ansible playbook successfully'.format(context['ansible_microservice']) + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Get_router_interface/.meta_Get_router_interface.xml b/Ansible_integration/Get_router_interface/.meta_Get_router_interface.xml new file mode 100755 index 000000000..b0e0d1839 --- /dev/null +++ b/Ansible_integration/Get_router_interface/.meta_Get_router_interface.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Get_router_interface.xml + + + DATE_MODIFICATION + 1615907957053 + + + REPOSITORY + Process + + + DATE_CREATION + 1615907957045 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/.meta_Process_DELETE b/Ansible_integration/Get_router_interface/.meta_Process_DELETE new file mode 100755 index 000000000..b576cc28f --- /dev/null +++ b/Ansible_integration/Get_router_interface/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614283971963 + + + REPOSITORY + Process + + + DATE_CREATION + 1614283971958 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/.meta_Process_Get_router_interface b/Ansible_integration/Get_router_interface/.meta_Process_Get_router_interface new file mode 100755 index 000000000..591bae02f --- /dev/null +++ b/Ansible_integration/Get_router_interface/.meta_Process_Get_router_interface @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Get_router_interface + + + DATE_MODIFICATION + 1614277288825 + + + REPOSITORY + Process + + + DATE_CREATION + 1614277288820 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/Get_router_interface.xml b/Ansible_integration/Get_router_interface/Get_router_interface.xml new file mode 100644 index 000000000..874814529 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Get_router_interface.xml @@ -0,0 +1,40 @@ + + + + + + + Get router interface + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks + Get router interface + + + /opt/fmc_repository/Process/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks + Calculate IP addresses + + + /opt/fmc_repository/Process/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks + Update IPAM + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to get information about router interface where servers are connected to. + service_id + python + 10000 + 5 + Get router interface + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Get_router_interface/Process_DELETE/.meta_Tasks b/Ansible_integration/Get_router_interface/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..0b3270dc2 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614283972050 + + + REPOSITORY + Process + + + DATE_CREATION + 1614283972045 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/.meta_Tasks b/Ansible_integration/Get_router_interface/Process_Get_router_interface/.meta_Tasks new file mode 100755 index 000000000..ec0f04a7d --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614277288910 + + + REPOSITORY + Process + + + DATE_CREATION + 1614277288904 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Calculate_IP_addresses.py b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Calculate_IP_addresses.py new file mode 100755 index 000000000..94be73732 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Calculate_IP_addresses.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Calculate_IP_addresses.py + + + DATE_MODIFICATION + 1615239818514 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239818503 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Get_router_interface.py b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Get_router_interface.py new file mode 100755 index 000000000..b9521211c --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Get_router_interface.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Get_router_interface.py + + + DATE_MODIFICATION + 1615520396883 + + + REPOSITORY + Process + + + DATE_CREATION + 1615520396875 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservice_Create_playbook_microservice.php b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Update_IPAM.py similarity index 77% rename from Ansible_integration/.meta_Create_microservice_Create_playbook_microservice.php rename to Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Update_IPAM.py index 8290a7d94..23ff5488a 100755 --- a/Ansible_integration/.meta_Create_microservice_Create_playbook_microservice.php +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/.meta_Task_Update_IPAM.py @@ -1,9 +1,13 @@ + + DISPLAYNAME + Task_Update_IPAM.py + DATE_MODIFICATION - 1597304215928 + 1615907956172 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1597304215923 + 1615907956166 TAG diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Calculate_IP_addresses.py b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Calculate_IP_addresses.py new file mode 100755 index 000000000..1101c1ea8 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Calculate_IP_addresses.py @@ -0,0 +1,92 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Calculate IPv4 addresses to configure on + router interface and on server interfaces + + +""" + +#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'] +router_device_id = context['exchange_dict']['router_device_id'] +customer_name = context['exchange_dict']['tenant'] +site = context['exchange_dict']['site'] +subnet = context['exchange_dict']['site_prefix'] +server_list = context['server_list'] +router_interface = context['router_interface'] + +ms_ipam_tenant = context['ms_aliases']['IPAM Tenants'] +ms_ipam_site = context['ms_aliases']['IPAM Sites'] +ms_ipam_device = context['ms_aliases']['IPAM Devices'] +ms_interface_connection = context['ms_aliases']['IPAM Interface Connections'] +ms_ipam_prefix = context['ms_aliases']['IPAM IPv4 prefixes'] +ms_ipam_avaliable_prefix = context['ms_aliases']['IPAM Available Prefixes'] +ms_ipam_address = context['ms_aliases']['IPAM IPv4 addresses'] +ms_ipam_interface = context['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']) + +#Get site router name +RouterDevice = Device(customer_id = re.match('^\D+?(\d+?)$',context['UBIQUBEID']).group(1), + device_id = router_device_id + ) +RouterDevice.read() +router_name = RouterDevice.name + + +#Get IP addresses +NetObject = ipaddress.ip_network(subnet) +site_ip_plan = dict() +ip_address_list = list(NetObject.hosts()) +site_ip_plan[router_name] = {'ip_address':'{}/{}'.format(ip_address_list[0], NetObject.prefixlen), + 'interface': router_interface} +context['exchange_dict']['ansible_microservice_variables']['next_hop'] = str(ip_address_list[0]) +context['exchange_dict']['ansible_microservice_variables']['network'] = '11.0.0.0/8' + +counter = 10 +server_number_counter = 1 +for server in server_list: + site_ip_plan[server[0]] = {'ip_address':'{}/{}'.format(ip_address_list[counter], NetObject.prefixlen), + 'interface': server[1]} + context['exchange_dict']['ansible_microservice_variables']['server_{}_ip_address'.format(server_number_counter)] = str(ip_address_list[counter]) + context['exchange_dict']['ansible_microservice_variables']['server_{}_prefix_len'.format(server_number_counter)] = str(NetObject.prefixlen) + context['exchange_dict']['ansible_microservice_variables']['server_{}_iface'.format(server_number_counter)] = str(server[1]) + counter += 1 + server_number_counter += 1 + +context['site_ip_plan'] = site_ip_plan +result = MSA_API.process_content('ENDED', 'Site IP plan is ready', context, True) +print(result) \ No newline at end of file diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Get_router_interface.py b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Get_router_interface.py new file mode 100755 index 000000000..6e56adb36 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Get_router_interface.py @@ -0,0 +1,78 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Get router interface name where servers are connected to + + +""" + + +#New Variables object +TaskVariables = Variables() + +#Add new variables +context = Variables.task_call(TaskVariables) + +#Import microservice alias list +with open('/opt/fmc_repository/Process/Ansible_integration/microservice_list.json', 'r') as alias_file: + context['ms_aliases'] = json.load(alias_file) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +ms_router_lldp = context['ms_aliases']['Router LLDP neighbour details'] + + +#Wait when LLDP neighbours become available +time.sleep(30) +#Create site router Order object +RouterOrderObject = Order(exchange_dict['router_device_id']) +RouterOrderObject.command_synchronize(300) +time.sleep(10) +RouterOrderObject.command_synchronize(300) + + +#Find a router interface where a site server is connected to +objects_list = RouterOrderObject.command_objects_instances(ms_router_lldp) +counter = 0 +router_interface = None +while router_interface is None and counter < len(objects_list): + neighbour_object = RouterOrderObject.command_objects_instances_by_id(ms_router_lldp, objects_list[counter])[ms_router_lldp][objects_list[counter]] + if re.search(exchange_dict['site'].lower(), neighbour_object['system_name'].lower()): + router_interface = neighbour_object['local_interface'] + counter += 1 + +#Find servers what should be configured to +objects_list = RouterOrderObject.command_objects_instances(ms_router_lldp) +server_list = list() +for neighbour in objects_list: + neighbour_object = RouterOrderObject.command_objects_instances_by_id(ms_router_lldp, neighbour)[ms_router_lldp][neighbour] + if re.search(exchange_dict['site'].lower(), neighbour_object['system_name'].lower()) and neighbour_object['local_interface'] == router_interface: + server_list.append((neighbour_object['system_name'],neighbour_object['port_name'])) + +context['router_interface'] = router_interface +context['server_list'] = server_list +context['exchange_dict'] = exchange_dict + +#Finish the task correctlly +if router_interface: + result = MSA_API.process_content('ENDED', 'Router interface has been identified correctly', context, True) +else: + result = MSA_API.process_content('FAIL', 'No router interface where servers are connected to', context, True) +print(result) diff --git a/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Update_IPAM.py b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Update_IPAM.py new file mode 100755 index 000000000..57f71bad1 --- /dev/null +++ b/Ansible_integration/Get_router_interface/Process_Get_router_interface/Tasks/Task_Update_IPAM.py @@ -0,0 +1,87 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Update IPAM by new IPv4 addresses + + +""" + +#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['exchange_dict']['ipam_device_id'] +customer_name = context['exchange_dict']['tenant'] +site = context['exchange_dict']['site'] +subnet = context['exchange_dict']['site_prefix'] +server_list = context['server_list'] +site_ip_plan = context['site_ip_plan'] + +ms_ipam_tenant = context['ms_aliases']['IPAM Tenants'] +ms_ipam_site = context['ms_aliases']['IPAM Sites'] +ms_ipam_device = context['ms_aliases']['IPAM Devices'] +ms_interface_connection = context['ms_aliases']['IPAM Interface Connections'] +ms_ipam_prefix = context['ms_aliases']['IPAM IPv4 prefixes'] +ms_ipam_avaliable_prefix = context['ms_aliases']['IPAM Available Prefixes'] +ms_ipam_address = context['ms_aliases']['IPAM IPv4 addresses'] +ms_ipam_interface = context['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) + +for host_name, details in site_ip_plan.items(): + ms_dict = {ms_ipam_address: + {details['ip_address']: {'object_id': details['ip_address'], + 'status': 'active', + 'tenant': customer_name, + 'vrf': '', + 'interface': '', + 'tags': '' + } + } + } + IpamOrderObject.command_execute('CREATE', ms_dict) + +exchange_dict = context['exchange_dict'] +exchange_dict['site_ip_plan'] = site_ip_plan + +#Udate exchange file +with open(context['exchange_file'], 'w') as exchange_file: + json.dump(exchange_dict, exchange_file) + +result = MSA_API.process_content('ENDED', 'IPAM has been updated', context, True) +print(result) + diff --git a/Ansible_integration/Get_router_interface/microservice_list.json b/Ansible_integration/Get_router_interface/microservice_list.json new file mode 100644 index 000000000..212822efe --- /dev/null +++ b/Ansible_integration/Get_router_interface/microservice_list.json @@ -0,0 +1,22 @@ +{ + "IPAM IPv4 addresses": "ip_address", + "IPAM IPv4 prefixes": "prefix", + "IPAM Sites": "sites", + "IPAM Tenants": "tenants", + "IPAM VLANs": "vlan", + "IPAM VRFs": "vrf", + "IPAM Devices": "devices", + "IPAM Interfaces": "interfaces", + "IPAM Interface Connections": "interface_connections", + "IPAM Available Prefixes": "available_prefix", + "Router OSPF configuration": "ospfv2_configuration", + "Router OSPF General": "ospfv2_general", + "Router OSPF LSDB LSA 1": "ospfv2_lsdb_lsa_1", + "Router Standard ACL": "std_acl", + "Router Interface": "interfaces", + "Router LLDP neighbour details": "lldp_neighbour_details", + "Router LLDP neighbour": "lldp_neighbours", + "Router prefix filter": "prefix_filter", + "Router static route": "static_route", + "Router DNS host records": "host_records" +} diff --git a/Ansible_integration/Import_from_IPAM/.meta_Import_from_IPAM.xml b/Ansible_integration/Import_from_IPAM/.meta_Import_from_IPAM.xml new file mode 100755 index 000000000..f84454f18 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/.meta_Import_from_IPAM.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Import_from_IPAM.xml + + + DATE_MODIFICATION + 1615239467865 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239467860 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/.meta_Process_DELETE b/Ansible_integration/Import_from_IPAM/.meta_Process_DELETE new file mode 100755 index 000000000..aa201b8c2 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614255950671 + + + REPOSITORY + Process + + + DATE_CREATION + 1614255950666 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/.meta_Process_Import_from_IPAM b/Ansible_integration/Import_from_IPAM/.meta_Process_Import_from_IPAM new file mode 100755 index 000000000..22b27645b --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/.meta_Process_Import_from_IPAM @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Import_from_IPAM + + + DATE_MODIFICATION + 1614239986455 + + + REPOSITORY + Process + + + DATE_CREATION + 1614239986451 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/Import_from_IPAM.xml b/Ansible_integration/Import_from_IPAM/Import_from_IPAM.xml new file mode 100644 index 000000000..33fad793a --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Import_from_IPAM.xml @@ -0,0 +1,43 @@ + + + + + + + + + + Import from IPAM + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks + Define vars + + + /opt/fmc_repository/Process/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks + Import site router + + + /opt/fmc_repository/Process/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks + Import site prefix + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible integration demo. The workflow is proposed to get info about available prefixes in IPAM and create a new prefix for server subnet. + service_id + python + 10000 + 5 + Import from IPAM + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Import_from_IPAM/Process_DELETE/.meta_Tasks b/Ansible_integration/Import_from_IPAM/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..788e93fcb --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614255950960 + + + REPOSITORY + Process + + + DATE_CREATION + 1614255950956 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/.meta_Tasks b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/.meta_Tasks new file mode 100755 index 000000000..921b6e241 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614239986604 + + + REPOSITORY + Process + + + DATE_CREATION + 1614239986599 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/.meta_Create_microservice_Modify_microservice_to_read_.php b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Define_vars.py similarity index 77% rename from Ansible_integration/.meta_Create_microservice_Modify_microservice_to_read_.php rename to Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Define_vars.py index e8cacdbae..9ca21b658 100755 --- a/Ansible_integration/.meta_Create_microservice_Modify_microservice_to_read_.php +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Define_vars.py @@ -1,9 +1,13 @@ + + DISPLAYNAME + Task_Define_vars.py + DATE_MODIFICATION - 1597304207205 + 1615239355144 REPOSITORY @@ -11,7 +15,7 @@ DATE_CREATION - 1597304207201 + 1615239355139 TAG diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_prefix.py b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_prefix.py new file mode 100755 index 000000000..086193168 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_prefix.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Import_site_prefix.py + + + DATE_MODIFICATION + 1615239466809 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239466802 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_router.py b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_router.py new file mode 100755 index 000000000..f3631199d --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/.meta_Task_Import_site_router.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Import_site_router.py + + + DATE_MODIFICATION + 1615239422664 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239422656 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Define_vars.py b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Define_vars.py new file mode 100755 index 000000000..3b157fd0c --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Define_vars.py @@ -0,0 +1,31 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +import json +import re + +""" +The proposals of the task are: + - Define variables +""" + + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('tenant', var_type = 'String') +TaskVariables.add('site', 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/Ansible_integration/microservice_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) diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_prefix.py b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_prefix.py new file mode 100755 index 000000000..2c4133742 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_prefix.py @@ -0,0 +1,163 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Find out available IPv4 prefix for the provided site; + - Create IPv4 prefix for the new server segment + + +""" + +#New Variables object +TaskVariables = Variables() + +#Add vars to context +context = Variables.task_call(TaskVariables) + +process_id = context['SERVICEINSTANCEID'] +ipam_device_id = context['ipam_device_id'] +customer_name = context['tenant'] +site = context['site'] + +ms_file = '/opt/fmc_repository/CommandDefinition/NETBOX/available_prefix.xml' +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_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) + + +#Pick up a subnet +Orchestration.update_asynchronous_task_details(*async_update_list, 'Find out a IPv4 block for the site... ') +customer_prefix = None +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_prefix) + +#Find customer IPv4 block (assume that customer has big IPv4 block with 'container' status) +counter = 0 +while (customer_prefix is None) or (counter < len(objects_list)): + prefix_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_prefix, + objects_list[counter])[ms_ipam_prefix][objects_list[counter]] + try: + if prefix_object['tenant'] == customer_name and prefix_object['status'] == 'container' and prefix_object['site'] == context['site']: + customer_prefix = prefix_object + except: + pass + counter += 1 + +Orchestration.update_asynchronous_task_details(*async_update_list, 'Find out a IPv4 block for the site... OK. IPv4 block is {}'.format(customer_prefix['object_id'])) +time.sleep(3) +#Modify microservice to grab avaliable prefix from cusotmer prefix +rewrite_string = '/api/ipam/prefixes/{id}/available-prefixes/'.format(id = customer_prefix['id']) +sed_command = 'sed -i \'s@/api/ipam/prefixes/@{rewrite_string}@\' {ms_file}'.format(rewrite_string = rewrite_string, + ms_file = ms_file) +os.system(sed_command) + +#Retrieve avaliable prefixes +Orchestration.update_asynchronous_task_details(*async_update_list, 'Create prefixes for the site... ') +response = IpamOrderObject.command_synchronize(300) +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_avaliable_prefix) + + +#Find avaliable /24 prefix +prefix_lenght_dict = dict() +for prefix in objects_list: + prefix_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_avaliable_prefix, prefix)[ms_ipam_avaliable_prefix][prefix] + prefix_lenght_dict[prefix] = prefix_object['prefix'].split('/')[1] +sorted_prefix = sorted(prefix_lenght_dict.items(), key=lambda x: x[1], reverse=True) + +prefix = None +counter = 0 +while (prefix is None) and counter < len(sorted_prefix): + if int(sorted_prefix[counter][1]) <= 24: + prefix = sorted_prefix[counter][0] + counter += 1 + + +#Derive site prefixes +site_base_prefix = ipaddress.ip_network(IpamOrderObject.command_objects_instances_by_id(ms_ipam_avaliable_prefix, + prefix)[ms_ipam_avaliable_prefix][prefix]['prefix']) +site_base_prefix = list(site_base_prefix.subnets(new_prefix = 24))[0] +site_prefix_list = list() +site_prefix_list.append(('lan', list(site_base_prefix.subnets(new_prefix = 24))[0])) + +#Modify microservice to original state back +rewrite_string = '/api/ipam/prefixes/'.format(id = customer_prefix['id']) +sed_command = 'sed -i \'s@/api/ipam/prefixes/.*@{rewrite_string}@\' {ms_file}'.format(rewrite_string = rewrite_string, + ms_file = ms_file) +os.system(sed_command) + +Orchestration.update_asynchronous_task_details(*async_update_list, 'Create prefixes for the site... OK') +time.sleep(3) +Orchestration.update_asynchronous_task_details(*async_update_list, 'Update IPAM system with new prefixes and IP addresses... ') + +#Update IPAM system with new prefixes +for prefix_tuple in site_prefix_list: + object_id = prefix_tuple[1] + tag = prefix_tuple[0] + ms_dict = {ms_ipam_prefix: + {str(object_id): {'object_id': str(object_id), + 'status': 'active', + 'site': site, + 'tenant': customer_name, + 'vrf': '', + 'tags': {'0': {'tag': tag}} + } + } + } + IpamOrderObject.command_execute('CREATE', ms_dict) + + +Orchestration.update_asynchronous_task_details(*async_update_list, 'Update IPAM system with new prefixes and IP addresses... OK') +time.sleep(3) + +exchange_dict = {"ipam_device_id": context['ipam_device_id'], + "router_device_id": context['site_router'], + "tenant": context['tenant'], + "site": context['site'], + "site_prefix": str(site_prefix_list[0][1]), + "ansible_microservice_variables": dict() + } + +#Udate exchange file +with open(context['exchange_file'], 'w') as exchange_file: + json.dump(exchange_dict, exchange_file) + +success_comment = f'IPv4 address plan for site {site} has been prepared successfully. IPAM system has been updated.' +print(IpamOrderObject.process_content('ENDED', success_comment, context, True)) diff --git a/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_router.py b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_router.py new file mode 100755 index 000000000..e8b9257ff --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/Process_Import_from_IPAM/Tasks/Task_Import_site_router.py @@ -0,0 +1,134 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time + + +""" +The proposals of the tasks are: + - Find out a MSA ME what represents site router + - Put the ME device id to context + +""" + + +#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'] +ipam_device_id = context['ipam_device_id'] +customer_name = context['tenant'] +site_name = context['site'] +process_id = context['SERVICEINSTANCEID'] + +#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): + tenant_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_tenant, + objects_list[counter])[ms_ipam_tenant][objects_list[counter]] + if tenant_object['object_id'] == customer_name: + does_tenant_exists = True + customer_id = tenant_object['id'] + counter += 1 + +#If the customer does not exist in IPAM system, finish the task as fail +if not does_tenant_exists: + fail_comment = f'Customer {customer_name} has not been found' + print(fail_string) + + + +#If we here, cusotmer exists. Extract customer sites +Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieving information about customer... OK') +Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieving customer details... ') + +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_site) + +#Collect cusromer sites object_id for future use +sites_list = list() +for site in objects_list: + site_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_site, + site)[ms_ipam_site][site] + try: + if site_object['tenant'] == customer_name: + sites_list.append(site) + except: + pass + +if context['site'] not in sites_list: + fail_comment = f'Site {site_name} has not been found' + print(fail_string) + +#Extract customer devices +objects_list = IpamOrderObject.command_objects_instances(ms_ipam_device) + +#Collect cusromer sites object_id for future use +site_router = None +for device in objects_list: + device_object = IpamOrderObject.command_objects_instances_by_id(ms_ipam_device, + device)[ms_ipam_device][device] + try: + if device_object['tenant'] == customer_name and device_object['site'] == context['site']: + site_router = device_object + except: + pass + +if not site_router: + fail_comment = f'There is no router on site {site_name}' + print(fail_string) + +Orchestration.update_asynchronous_task_details(*async_update_list, 'Retrieving customer details... OK') + +#Find out device_id for all PE what the CE connected to +MsaLookup = lookup.Lookup() +MsaLookup.look_list_device_ids() +devices = json.loads(MsaLookup.content) +counter = 0 +site_router_device_id = None + +while site_router_device_id is None and counter < len(devices): + if devices[counter]['name'] == site_router['object_id']: + site_router_device_id = devices[counter]['id'] + counter +=1 + +if not site_router_device_id: + fail_comment = 'Can not find MSA ME for router {}'.format(site_router['name']) + print(fail_string) +else: + context['site_router'] = site_router_device_id + +success_comment = 'Sie router has been identified' + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Import_from_IPAM/ipam_microservice_list.json b/Ansible_integration/Import_from_IPAM/ipam_microservice_list.json new file mode 100644 index 000000000..e57d628f7 --- /dev/null +++ b/Ansible_integration/Import_from_IPAM/ipam_microservice_list.json @@ -0,0 +1,12 @@ +{ + "IPAM IPv4 addresses": "ip_address", + "IPAM IPv4 prefixes": "prefix", + "IPAM Sites": "sites", + "IPAM Tenants": "tenants", + "IPAM VLANs": "vlan", + "IPAM VRFs": "vrf", + "IPAM Devices": "devices", + "IPAM Interfaces": "interfaces", + "IPAM Interface Connections": "interface_connections", + "IPAM Available Prefixes": "available_prefix" +} diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_DELETE b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_DELETE new file mode 100755 index 000000000..164234249 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614258885162 + + + REPOSITORY + Process + + + DATE_CREATION + 1614258885157 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_Turn_on_LLDP_on_hosts b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_Turn_on_LLDP_on_hosts new file mode 100755 index 000000000..33925ec13 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Process_Turn_on_LLDP_on_hosts @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Turn_on_LLDP_on_hosts + + + DATE_MODIFICATION + 1614257738064 + + + REPOSITORY + Process + + + DATE_CREATION + 1614257738060 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Turn_on_LLDP_on_hosts.xml b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Turn_on_LLDP_on_hosts.xml new file mode 100755 index 000000000..909adc702 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/.meta_Turn_on_LLDP_on_hosts.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Turn_on_LLDP_on_hosts.xml + + + DATE_MODIFICATION + 1614265265590 + + + REPOSITORY + Process + + + DATE_CREATION + 1614265265586 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/Process_DELETE/.meta_Tasks b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..67cc4e2f2 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614258885249 + + + REPOSITORY + Process + + + DATE_CREATION + 1614258885245 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/.meta_Tasks b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/.meta_Tasks new file mode 100755 index 000000000..3d17028a3 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614257738155 + + + REPOSITORY + Process + + + DATE_CREATION + 1614257738151 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/.meta_Task_Execute_Ansible_microservice.py b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/.meta_Task_Execute_Ansible_microservice.py new file mode 100755 index 000000000..6b8f1a0c8 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/.meta_Task_Execute_Ansible_microservice.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Execute_Ansible_microservice.py + + + DATE_MODIFICATION + 1614265261577 + + + REPOSITORY + Process + + + DATE_CREATION + 1614257758119 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/Task_Execute_Ansible_microservice.py b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/Task_Execute_Ansible_microservice.py new file mode 100755 index 000000000..890d610c0 --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks/Task_Execute_Ansible_microservice.py @@ -0,0 +1,61 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.repository import Repository +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +from msa_sdk import lookup +from msa_sdk import util +import json +import sys +import time +import re + + +""" +The proposals of the tasks are: + +""" + +#New Variables object +TaskVariables = Variables() + +#Add new variables +TaskVariables.add('ansible_device_id', var_type = 'Device') +TaskVariables.add('ansible_lldp_microservice', var_type = 'String') + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['ansible_device_id'] = re.match('^\D+?(\d+?)$', context['ansible_device_id']).group(1) + +process_id = context['SERVICEINSTANCEID'] + +#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 Ansible order object +RepositoryObject = Repository() +AnsibleOrderObject = Order(context['ansible_device_id']) +AnsibleOrderObject.command_synchronize(300) + +#Get default values for microservice +deployment_settings_id = AnsibleOrderObject.command_get_deployment_settings_id() +microservice_path = RepositoryObject.get_microservice_path_by_name(context['ansible_lldp_microservice'], deployment_settings_id) +microservice_variables = RepositoryObject.get_microservice_variables_default_value(microservice_path) + +ms_dict = {context['ansible_lldp_microservice']: {'': {'object_id': '', 'playbook_path': microservice_variables['playbook_path']}}} +AnsibleOrderObject.command_execute('CREATE', ms_dict) + +success_comment = 'LLDP activated on hosts' + +#Finish the task correctlly +print(MSA_API.process_content('ENDED', success_comment , context, True)) \ No newline at end of file diff --git a/Ansible_integration/Turn_on_LLDP_on_hosts/Turn_on_LLDP_on_hosts.xml b/Ansible_integration/Turn_on_LLDP_on_hosts/Turn_on_LLDP_on_hosts.xml new file mode 100644 index 000000000..48951373b --- /dev/null +++ b/Ansible_integration/Turn_on_LLDP_on_hosts/Turn_on_LLDP_on_hosts.xml @@ -0,0 +1,33 @@ + + + + + + + + Turn on LLDP on hosts + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Turn_on_LLDP_on_hosts/Process_Turn_on_LLDP_on_hosts/Tasks + Execute Ansible microservice + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansiblle Demo + service_id + python + 10000 + 5 + Turn on LLDP on hosts + ANSIBLE|DEMO + + diff --git a/Ansible_integration/Update_DNS_records/.meta_Process_DELETE b/Ansible_integration/Update_DNS_records/.meta_Process_DELETE new file mode 100755 index 000000000..da8168ac8 --- /dev/null +++ b/Ansible_integration/Update_DNS_records/.meta_Process_DELETE @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_DELETE + + + DATE_MODIFICATION + 1614761498011 + + + REPOSITORY + Process + + + DATE_CREATION + 1614761498006 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/.meta_Process_Update_DNS_records b/Ansible_integration/Update_DNS_records/.meta_Process_Update_DNS_records new file mode 100755 index 000000000..3bc4fcbef --- /dev/null +++ b/Ansible_integration/Update_DNS_records/.meta_Process_Update_DNS_records @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Process_Update_DNS_records + + + DATE_MODIFICATION + 1614759958271 + + + REPOSITORY + Process + + + DATE_CREATION + 1614759958266 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/.meta_Update_DNS_records.xml b/Ansible_integration/Update_DNS_records/.meta_Update_DNS_records.xml new file mode 100755 index 000000000..d9ce40417 --- /dev/null +++ b/Ansible_integration/Update_DNS_records/.meta_Update_DNS_records.xml @@ -0,0 +1,43 @@ + + + + + DISPLAYNAME + Update_DNS_records.xml + + + DATE_MODIFICATION + 1615239877817 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239877813 + + + MODEL + 0 + + + TAG + + + FILE_TYPE + text + + + MANUFACTURER + 0 + + + TYPE + FILE + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/Process_DELETE/.meta_Tasks b/Ansible_integration/Update_DNS_records/Process_DELETE/.meta_Tasks new file mode 100755 index 000000000..e8f733290 --- /dev/null +++ b/Ansible_integration/Update_DNS_records/Process_DELETE/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614761498096 + + + REPOSITORY + Process + + + DATE_CREATION + 1614761498092 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/.meta_Tasks b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/.meta_Tasks new file mode 100755 index 000000000..30270873e --- /dev/null +++ b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/.meta_Tasks @@ -0,0 +1,31 @@ + + + + + DISPLAYNAME + Tasks + + + DATE_MODIFICATION + 1614759958354 + + + REPOSITORY + Process + + + DATE_CREATION + 1614759958349 + + + TAG + + + TYPE + DIRECTORY + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/.meta_Task_Update_DNS_records.py b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/.meta_Task_Update_DNS_records.py new file mode 100755 index 000000000..eb4bebbc6 --- /dev/null +++ b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/.meta_Task_Update_DNS_records.py @@ -0,0 +1,35 @@ + + + + + DISPLAYNAME + Task_Update_DNS_records.py + + + DATE_MODIFICATION + 1615239877137 + + + REPOSITORY + Process + + + DATE_CREATION + 1615239877132 + + + TAG + + + FILE_TYPE + text + + + TYPE + UPLOAD + + + COMMENT + + + diff --git a/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/Task_Update_DNS_records.py b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/Task_Update_DNS_records.py new file mode 100755 index 000000000..3fe320e5e --- /dev/null +++ b/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks/Task_Update_DNS_records.py @@ -0,0 +1,67 @@ +from msa_sdk.variables import Variables +from msa_sdk.msa_api import MSA_API +from msa_sdk.order import Order +from msa_sdk.device import Device +from msa_sdk.orchestration import Orchestration +from datetime import datetime +from msa_sdk import constants +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: + - Update DNS records + +""" + +#New Variables object +TaskVariables = Variables() +TaskVariables.add('dns_server', var_type = 'Device') + + +#Add vars to context +context = Variables.task_call(TaskVariables) +context['dns_server'] = re.match('^\D*?(\d+?)$', context['dns_server']).group(1) + +#Import microservice alias list +with open('/opt/fmc_repository/Process/Ansible_integration/Get_router_interface/microservice_list.json', 'r') as alias_file: + context['ms_aliases'] = json.load(alias_file) + +#Udate exchange file +with open(context['exchange_file'], 'r') as exchange_file: + exchange_dict = json.load(exchange_file) + +process_id = context['SERVICEINSTANCEID'] +site_ip_plan = exchange_dict['site_ip_plan'] +ms_router_dns_records = context['ms_aliases']['Router DNS host records'] + +#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 site router Order object +RouterOrderObject = Order(context['dns_server']) +RouterOrderObject.command_synchronize(300) + +#Create DNS record for each host in site_ip_plan +for host, details in site_ip_plan.items(): + ms_dict = {ms_router_dns_records: {host: {"object_id": host, "ip_address": details['ip_address'].split('/')[0]}}} + RouterOrderObject.command_execute('CREATE', ms_dict) + +result = MSA_API.process_content('ENDED', 'DNS Records have been updated', context, True) +print(result) + diff --git a/Ansible_integration/Update_DNS_records/Update_DNS_records.xml b/Ansible_integration/Update_DNS_records/Update_DNS_records.xml new file mode 100644 index 000000000..4f6a0d6cf --- /dev/null +++ b/Ansible_integration/Update_DNS_records/Update_DNS_records.xml @@ -0,0 +1,33 @@ + + + + + + + + Update DNS records + CREATE + 5 + + + /opt/fmc_repository/Process/Ansible_integration/Update_DNS_records/Process_Update_DNS_records/Tasks + Update DNS records + + + + DELETE + DELETE + 5 + + + + + The workflow is part of Ansible demo. The workflow is proposed to configure servers FQDN on DNS server + service_id + python + 10000 + 5 + Update DNS records + ANSIBLE|DEMO + + diff --git a/Ansible_integration/exchange_file.json b/Ansible_integration/exchange_file.json new file mode 100644 index 000000000..bfa0405c4 --- /dev/null +++ b/Ansible_integration/exchange_file.json @@ -0,0 +1 @@ +{"ipam_device_id": "1806", "router_device_id": 1802, "tenant": "Ansible Demo", "site": "Grenoble", "site_prefix": "11.0.129.0/24", "ansible_microservice_variables": {"next_hop": "11.0.129.1", "network": "11.0.0.0/8", "server_1_ip_address": "11.0.129.11", "server_1_prefix_len": "24", "server_1_iface": "ens192", "server_2_ip_address": "11.0.129.12", "server_2_prefix_len": "24", "server_2_iface": "ens192"}, "site_ip_plan": {"grenoble-router-1": {"ip_address": "11.0.129.1/24", "interface": "Gi0/2"}, "srv1.grenoble.lab": {"ip_address": "11.0.129.11/24", "interface": "ens192"}, "srv2.grenoble.lab": {"ip_address": "11.0.129.12/24", "interface": "ens192"}}} \ No newline at end of file diff --git a/Ansible_integration/microservice_list.json b/Ansible_integration/microservice_list.json new file mode 100644 index 000000000..212822efe --- /dev/null +++ b/Ansible_integration/microservice_list.json @@ -0,0 +1,22 @@ +{ + "IPAM IPv4 addresses": "ip_address", + "IPAM IPv4 prefixes": "prefix", + "IPAM Sites": "sites", + "IPAM Tenants": "tenants", + "IPAM VLANs": "vlan", + "IPAM VRFs": "vrf", + "IPAM Devices": "devices", + "IPAM Interfaces": "interfaces", + "IPAM Interface Connections": "interface_connections", + "IPAM Available Prefixes": "available_prefix", + "Router OSPF configuration": "ospfv2_configuration", + "Router OSPF General": "ospfv2_general", + "Router OSPF LSDB LSA 1": "ospfv2_lsdb_lsa_1", + "Router Standard ACL": "std_acl", + "Router Interface": "interfaces", + "Router LLDP neighbour details": "lldp_neighbour_details", + "Router LLDP neighbour": "lldp_neighbours", + "Router prefix filter": "prefix_filter", + "Router static route": "static_route", + "Router DNS host records": "host_records" +}