diff --git a/README.md b/README.md index 14e1b51..e19fc3c 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ The CloudGenix Config Utility will default to using the SDK version. An out-of-d #### Version | Version | Build | Changes | | ------- | ----- | ------- | +| **1.6.0** | **b3** | Minor bug fixes | | **1.6.0** | **b2** | Minor bug fixes | | | **b1** | Support for CloudGenix SDK 5.6.1b2, cellular devices, multicast, apiversion flag in cli, bugfixes | **1.5.0** | **b2** | Back ported fix for CGCBL-847 - updated used_for (private_wan to private) in default_interfaces| diff --git a/cloudgenix_config/__init__.py b/cloudgenix_config/__init__.py index f17e9f6..41aca2f 100644 --- a/cloudgenix_config/__init__.py +++ b/cloudgenix_config/__init__.py @@ -2,7 +2,7 @@ """ Configuration IMPORT/EXPORT common functions -**Version:** 1.6.0b2 +**Version:** 1.6.0b3 **Author:** CloudGenix @@ -49,7 +49,7 @@ # Version for reference -__version__ = "1.6.0b2" +__version__ = "1.6.0b3" version = __version__ __author__ = "CloudGenix Developer Support " diff --git a/cloudgenix_config/default_interfaces.py b/cloudgenix_config/default_interfaces.py index d61fe2d..d6401b4 100644 --- a/cloudgenix_config/default_interfaces.py +++ b/cloudgenix_config/default_interfaces.py @@ -2,7 +2,7 @@ """ Configuration IMPORT/EXPORT default device port configurations -**Version:** 1.6.0b2 +**Version:** 1.6.0b3 **Author:** CloudGenix diff --git a/cloudgenix_config/do.py b/cloudgenix_config/do.py index 5ad2bc8..732fe38 100755 --- a/cloudgenix_config/do.py +++ b/cloudgenix_config/do.py @@ -2,7 +2,7 @@ """ Configuration IMPORT worker/script -**Version:** 1.6.0b2 +**Version:** 1.6.0b3 **Author:** CloudGenix @@ -137,7 +137,7 @@ FILE_TYPE_REQUIRED = "cloudgenix template" FILE_VERSION_REQUIRED = "1.0" SDK_VERSION_REQUIRED = '5.6.1b2' -CONFIG_VERSION_REQUIRED = '1.6.0b2' +CONFIG_VERSION_REQUIRED = '1.6.0b3' DEFAULT_WAIT_MAX_TIME = 600 # seconds DEFAULT_WAIT_INTERVAL = 10 # seconds DEFAULT_ELEM_CONFIG_INTERVAL = 0 # seconds @@ -1327,6 +1327,7 @@ def staged_upgrade_downgrade_element(matching_element, config_element, wait_upgr element_id = element.get('id') element_name = element.get('name') element_serial = element.get('serial_number') + element_version = element.get('software_version') element_descriptive_text = element_name if element_name else "Serial: {0}".format(element_serial) \ if element_serial else "ID: {0}".format(element_id) @@ -1368,33 +1369,34 @@ def staged_upgrade_downgrade_element(matching_element, config_element, wait_upgr backup_active_name = None active_image_id = software_state_resp.cgx_content.get('active_image_id') - if active_image_id is None: - # attempt to pull active_image_id from status array for newer api. - prev_image_operations = software_state_resp.cgx_content.get('items') - if prev_image_operations and isinstance(prev_image_operations, list): - for prev_image_operation in prev_image_operations: - operation_active_id = prev_image_operation.get('active_image_id') - operation_active_name = prev_image_operation.get('active_version') + # if active_image_id is None: + # # attempt to pull active_image_id from status array for newer api. + # prev_image_operations = software_state_resp.cgx_content.get('items') + # if prev_image_operations and isinstance(prev_image_operations, list): + # for prev_image_operation in prev_image_operations: + # operation_active_id = prev_image_operation.get('active_image_id') + # operation_active_name = prev_image_operation.get('active_version') + # + # if operation_active_name: + # backup_active_name = operation_active_name + # + # if operation_active_id: + # active_image_id = operation_active_id + # # exit out of for loop + # break + # + # # final check + # if active_image_id is None: + # # fail + # active_image_id = '' + # throw_warning("Unable to get active image id. Continuing.. ", software_state_resp) + # + # local_debug("ACTIVE_IMAGE_ID: {0}".format(active_image_id), software_state_resp) + # local_debug("REQUESTED IMAGE {0} ID: {1}".format(elem_config_version, image_id)) + # local_debug("CURRENT IMAGE IDS AVAILABLE: ", images_id2n) + # + active_image_name = str(images_id2n.get(active_image_id, element_version)) - if operation_active_name: - backup_active_name = operation_active_name - - if operation_active_id: - active_image_id = operation_active_id - # exit out of for loop - break - - # final check - if active_image_id is None: - # fail - active_image_id = '' - throw_error("Unable to get active image id ", software_state_resp) - - local_debug("ACTIVE_IMAGE_ID: {0}".format(active_image_id), software_state_resp) - local_debug("REQUESTED IMAGE {0} ID: {1}".format(elem_config_version, image_id)) - local_debug("CURRENT IMAGE IDS AVAILABLE: ", images_id2n) - - active_image_name = str(images_id2n.get(active_image_id, backup_active_name)) new_version, new_image_id = '', '' if active_image_id == str(image_id): @@ -7588,7 +7590,6 @@ def do_site(loaded_config, destroy, declaim=False, passed_sdk=None, passed_timeo wait_interval=interval_timeout) # at this point element will be claimed. - # Check elements and upgrade or downgrade if necessary staged_upgrade_downgrade_element(matching_element, config_element, wait_upgrade_timeout=timeout_upgrade, pause_for_upgrade=wait_upgrade, diff --git a/cloudgenix_config/pull.py b/cloudgenix_config/pull.py index 7e1ce58..2087c11 100755 --- a/cloudgenix_config/pull.py +++ b/cloudgenix_config/pull.py @@ -2,7 +2,7 @@ """ Configuration EXPORT worker/script -**Version:** 1.6.0b2 +**Version:** 1.6.0b3 **Author:** CloudGenix @@ -209,7 +209,7 @@ FROM_CLOUDBLADE = 0 # Fix for CGCBL-565 SDK_VERSION_REQUIRED = '5.6.1b2' -CONFIG_VERSION_REQUIRED = '1.6.0b2' +CONFIG_VERSION_REQUIRED = '1.6.0b3' # Define constructor globally for now. sdk = cloudgenix.API() jd = cloudgenix.jd diff --git a/release_notes/1.6.0b3.md b/release_notes/1.6.0b3.md new file mode 100644 index 0000000..1841d4e --- /dev/null +++ b/release_notes/1.6.0b3.md @@ -0,0 +1,67 @@ +# Release Notes 1.6.0b3 + +## Release Date +February 18, 2022 + +## What's new? +- Bug fixes (CGCBL-842) + +## API Major Version Changes +None + +## API Minor Version Changes +- elements (v2.4 to v2.5) +- interfaces (v4.10 to v4.11) +- sites (v4.5 to v4.6) +- syslogservers (v2.1 to v2.2) +- waninterfaces (v2.6 to v2.7) + +## New Parameters introduced in the YAML file + +elements +- admin_suspend_state +- fips_mode +- fips_mode_change_start_time + +interfaces: +- cellular_config +- multicast_config +``` +multicast_config: + igmp_version: IGMPV3 + multicast_enabled: false +``` + +sites +- security_policysetstack_id + +syslog +- remote_ca_certificate +- server_fqdn +- syslog_profile_id + +waninterfaces: +- use_lqm_for_non_hub_paths + + +## Caveats + +ION 9000: + +- When trying to configure bypasspairs and interfaces of type port having the same name i.e. 12,13,14,15 or 16, the configuration must be pushed in two steps + - Step 1: Configure interface of type port first - only include interface configuration for type port in the YAML file. + - Step 2: Configure interface of type bypasspair - only include interface configuration for type bypasspair in the YAML file + +- When the source interface or the parent interface is of type byppasspair and another interface of type port with the same name exist, set the attribute **parent_type** to **bypasspair_**. This helps the utility correctly identify the interface between the bypasspair and port of the same name. If the parent_type is not set, the utility assume the parent interface is of type port in case of conflicts. + + +## More Info + +- Prisma SD-WAN Release Notes + + + +- Prisma SDWAN Documentation + + + diff --git a/setup.cfg b/setup.cfg index 5c961e1..452a51a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ [metadata] name = cloudgenix_config description = Configuration exporting and Continuous Integration (CI) capable configuration importing for the CloudGenix Cloud Controller. -version = 1.6.0b2 +version = 1.6.0b3 author = CloudGenix Developer Support author-email = developers@cloudgenix.com description-file = README.md diff --git a/setup.py b/setup.py index 5067959..04fd0cb 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ long_description = f.read() setup(name='cloudgenix_config', - version='1.6.0b2', + version='1.6.0b3', description='Configuration exporting and Continuous Integration (CI) capable configuration importing for the ' 'CloudGenix Cloud Controller.', long_description=long_description,